之间有什么区别:
__file__
和
sys.argv[0]
因为两者似乎都在做同样的事情:他们拥有剧本的名称。
如果没有区别,那么为什么几乎所有的地方都使用__file__
,而我从未见过使用sys.argv[0]
。
答案 0 :(得分:19)
__file__
是当前文件的名称,如果您在模块内部或使用execfile()
启动脚本而不是通过调用{{1},则可能与主脚本不同}。 python scriptname.py
通常是您更安全的选择。
答案 1 :(得分:4)
如果你在你的python程序的“主”脚本中,它是唯一相同的。如果导入其他文件,__file__
将包含该文件的路径,但sys.argv仍将保留相同的值。
答案 2 :(得分:2)
就像斯文所说的那样。
MiLu@Dago: /tmp > cat file.py
import sys
import blub
print __file__
print sys.argv[0]
MiLu@Dago: /tmp > cat blub.py
import sys
print "BLUB: " + __file__
print "BLUB: " + sys.argv[0]
MiLu@Dago: /tmp > python file.py
BLUB: /tmp/blub.pyc
BLUB: file.py
file.py
file.py
我认为__file__
在预处理器步骤中被文件名替换。我并不是100%确定在Python中实际情况 - 但它在C/C++和Perl中。在Python中,这可能会有所不同,因为__file__
对于编译的Python文件(pyc
)也是正确的,并且该文件的内容中似乎没有任何文件名跟踪。
答案 3 :(得分:0)
实际上argv [0]可能是脚本名称或脚本+脚本名称的完整路径,具体取决于操作系统。
以下是官方文档http://docs.python.org/py3k/library/sys.html#sys.argv
中的条目