查找当前运行的文件的路径
我如何找到当前正在运行的Python脚本的完整路径? 也就是说,为了实现这个目标,我需要做些什么:
Nirvana@bahamut:/tmp$ python baz.py
running from /tmp
file is baz.py
__file__
不是你正在寻找的。 不要使用意外的副作用
sys.argv[0]
始终是脚本的路径(如果实际上已经调用脚本) - 请参阅http://docs.python.org/library/sys.html#sys.argv
__file__
是当前正在执行的文件(脚本或模块)的路径。 如果从脚本访问它,这意外与脚本相同! 如果你想将诸如相对于脚本位置的资源文件定位到一个库中这样有用的东西,那么你必须使用sys.argv[0]
。
例:
C:junkso>type junksoscriptpathscript1.py
import sys, os
print "script: sys.argv[0] is", repr(sys.argv[0])
print "script: __file__ is", repr(__file__)
print "script: cwd is", repr(os.getcwd())
import whereutils
whereutils.show_where()
C:junkso>type python26libsite-packageswhereutils.py
import sys, os
def show_where():
print "show_where: sys.argv[0] is", repr(sys.argv[0])
print "show_where: __file__ is", repr(__file__)
print "show_where: cwd is", repr(os.getcwd())
C:junkso>python26python scriptpathscript1.py
script: sys.argv[0] is 'scriptpathscript1.py'
script: __file__ is 'scriptpathscript1.py'
script: cwd is 'C:junkso'
show_where: sys.argv[0] is 'scriptpathscript1.py'
show_where: __file__ is 'C:python26libsite-packageswhereutils.pyc'
show_where: cwd is 'C:junkso'
这将打印脚本所在的目录(与工作目录相对):
import os
dirname, filename = os.path.split(os.path.abspath(__file__))
print "running from", dirname
print "file is", filename
当我将它放在c:src
时,它的行为如何:
> cd c:src
> python so-where.py
running from C:src
file is so-where.py
> cd c:
> python srcso-where.py
running from C:src
file is so-where.py
import sys, os
file = sys.argv[0]
pathname = os.path.dirname(file)
print 'running from %s' % os.path.abspath(pathname)
print 'file is %s' % file
检查os.getcwd()(docs)
链接地址: http://www.djcxy.com/p/54693.html