我的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)
根据伟大的Dive Into Python:
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)
Run Code Online (Sandbox Code Playgroud)
目前的两个答案反映了您的问题的模糊性.
当你跑步时python /path/to/script.py,你想要你的临时文件?在当前目录(./tempfile.txt)或中/path/to/tempfile.txt?
如果是前者,你可以简单地使用相对路径(或者,对于奇怪和神秘的目的,获得与@Desintegr建议的当前目录相当的绝对路径os.getcwd).
如果是后者,你可以sys.argv[0]像@Jonathan建议的那样准确学习如何调用脚本,并使用函数操作该路径os.path(当然os.getcwd,如果前一种情况适用,你也可以将这些函数应用于返回的内容),或者工作用os.path.dirname(__file__)等等(后者的必要的,如果你想后者的行为也当脚本导入为模块,而不只是当它运行作为主脚本).