__file__和sys.argv [0]之间的区别

时间:2011-05-01 21:39:02

标签: python

之间有什么区别:

__file__

sys.argv[0]

因为两者似乎都在做同样的事情:他们拥有剧本的名称。

如果没有区别,那么为什么几乎所有的地方都使用__file__,而我从未见过使用sys.argv[0]

4 个答案:

答案 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

中的条目