我的script.py在与脚本相同的目录中创建一个临时文件.
运行时:
python script.py
Run Code Online (Sandbox Code Playgroud)
它只是文件
但是当你运行时它不起作用:
python /path/to/script.py
Run Code Online (Sandbox Code Playgroud)
那是因为我在script.py中使用了临时文件的相对路径而不是绝对路径.问题是我不知道它将在哪条路上运行,所以我需要一种方法来知道这一点.
关于什么?
os.path.abspath(os.path.dirname(__file__))
Run Code Online (Sandbox Code Playgroud) 有两个程序 - parent.py和myscript.py,如下所示.parent.py在控制台中保持打印消息.并且myscript.py需要访问parent.py打印的内容.
parent.py:
import time
while 1:
time.sleep(1)
print "test"
Run Code Online (Sandbox Code Playgroud)
myscript.py:
import subprocess
p = None
p = subprocess.Popen(['python', 'parent.py'],
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT,
)
for line in p.stdout:
print line
Run Code Online (Sandbox Code Playgroud)
我希望myscript.py动态地捕获parent.py的输出.可以看出,parent.py有一个无限循环 - 脚本永远不会停止,但每当它输出单词'test'时,myscript.py也应输出相同的内容.但myscript.py没有给出任何输出.
我尝试用parent替换parent.py中的代码
print "Hello"
Run Code Online (Sandbox Code Playgroud)
程序完成执行后,myscript.py也打印出"Hello".所以我想除非parent.py的执行完成,否则myscript.py不会读取它.那是什么事吗?
我也尝试用这个片段替换myscript.py中的循环:
for line in iter(p.stdout.readline, ''):
print line
Run Code Online (Sandbox Code Playgroud)
仍然没有输出.
我的问题是:即使parent.py永远不会完成执行,我如何让myscript.py动态读取parent.py正在打印的所有内容.
(我发现了类似的问题,但是它们要么不起作用,要么根本没有答案.)
def main():
fh = open('lines.txt')
for line in fh.readlines():
print(line)
if __name__ == "__main__": main()
Run Code Online (Sandbox Code Playgroud)
目录文件
我在for-working.py档案,我正在尝试访问lines.txt同一工作目录中的文件.但我得到错误
没有这样的文件或目录:'lines.txt'
打开文件时python是否需要有绝对路径?
为什么这条相对路径不适用于此?
运行python 3.6
编辑^ 1我正在运行带有Don Jayamanne的python包扩展的visualstudio代码,以及用于编译/执行python代码的"Code Runner"包
编辑^ 2完整的错误:
Traceback (most recent call last):
File "c:\www\Ex_Files_Python_3_EssT(1)\Ex_Files_Python_3_EssT\Exercise Files\07 Loops\for-working.py", line 11, in <module>
if __name__ == "__main__": main()
File "c:\www\Ex_Files_Python_3_EssT(1)\Ex_Files_Python_3_EssT\Exercise Files\07 Loops\for-working.py", line 7, in main
fh = open('lines.txt', 'r')
FileNotFoundError: [Errno 2] No such file or directory: 'lines.txt'
Run Code Online (Sandbox Code Playgroud)
编辑^ 3检查sys.path
import sys
print(sys.path)
Run Code Online (Sandbox Code Playgroud)
产生这些信息: …
假设我有一个文件夹 ,x其中包含两个文件夹foo和bar。在里面foo我有一个Python脚本bar,在里面我有我的数据(假设有几个.txt文件)。现在,我想从我的脚本中访问我的数据。我可以简单地使用这个命令,然后就到此为止:
fileList = glob.glob('/absolute/path/to/bar/*.txt')
Run Code Online (Sandbox Code Playgroud)
但是,使用这种方法,如果我移动x文件夹,我的脚本就会中断。
以相对方式指定路径以允许我自由移动父文件夹的最简单方法是什么x?
我正在寻找替代品
import os
package_dir = os.path.dirname(os.path.abspath(__file__))
file_path = os.path.join(package_dir,'foo.csv')
Run Code Online (Sandbox Code Playgroud)
我的工作路径不是文件的路径。所以当我想加载一个文件时,我需要一种方法来生成与我的工作目录相比的相对路径。
我想更新到 pathlib(或其他任何东西)。但最好的方法是什么?
我找到了/sf/answers/3093194261/,但我不认为这个解决方案比我目前的方式更好。
它不是如何正确确定当前脚本目录的副本?,因为我明确询问了最好的方式。另一篇文章中的大多数解决方案看起来不太好,或者在我的问题中已经提到。解决方案
Path(__file__).with_name("foo.csv")
Run Code Online (Sandbox Code Playgroud)
这里给出的解决方案比另一个问题中给出的解决方案要好得多,因为它很容易理解,并且是一种真正的 Pythonic 解决方法。如果这个问题是重复的,那么在另一篇文章中也会有一个同样好的答案。