How to know the path of the running script in Python?
my script.py在脚本所在的目录中创建一个临时文件。
运行时:
它只起作用文件
但当你跑步时,它不起作用:
1
| python /path/to/script.py |
这是因为我使用的是script.py中临时文件的相对路径,而不是绝对路径。问题是我不知道它会在哪条路径上运行,所以我需要一种方法来常规地了解这一点。
怎么样?
1
| os.path.abspath(os.path.dirname(__file__)) |
根据Python的伟大潜入:
1 2 3 4 5 6
| import sys, os
print 'sys.argv[0] =', sys.argv[0] 1
pathname = os.path.dirname(sys.argv[0]) 2
print 'path =', pathname
print 'full path =', os.path.abspath(pathname) |
- 那么os.path.abspath(os.path.dirname(uu file_uuuuu))呢?
- 我听说__file__不适用于Mac电脑。
- 另一个很好的答案也解释了为什么__file__不是你想要的:__file__是当前执行文件(脚本或模块)的路径。如果从脚本访问该脚本,则意外地与该脚本相同。
目前的两个答案反映了你问题的模糊性。
运行python /path/to/script.py后,您希望将tempfile放在哪里?在当前目录(./tempfile.txt或/path/to/tempfile.txt中?
如果是前者,您可以简单地使用相对路径(或者,出于奇怪和神秘的目的,使用os.getcwd获得与当前目录等效的绝对路径,如@desintegr建议的那样)。
如果是后者,您可以像@jonathan建议的那样,准确地了解脚本是如何使用sys.argv[0]调用的,并使用os.path中的函数(当然,如果前者适用,您也可以将这些函数应用于os.getcwd返回的内容),或者使用os.path.dirname(__file__)等(如果需要,后者是必需的)当脚本作为模块导入时,后一种行为也会发生,而不仅仅是当它作为主脚本运行时)。
- 谢谢,我希望临时文件与script.py在同一目录中
- @Juanjo,那么os.path.dirname(__file__)可能是最好的,你选择的答案是第二好的(因为它需要更多的import--sys--使用__file__--避免)。
您可以使用os.getcwd()方法了解当前工作目录。
Return a string representing the current working directory. Availability: Unix, Windows.
可以使用os.chdir(path)方法更改当前工作目录。
Change the current working directory to path. Availability: Unix, Windows.