关于python:__ file__和sys.argv [0]之间的区别

Difference between __file__ and sys.argv[0]

以下两者有什么区别吗?

__file__

江户十一〔一〕号

因为两人似乎都在做同样的事情:他们持有脚本的名称。

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


__file__是当前文件的名称,如果您在模块中,或者如果您使用execfile()而不是通过调用python scriptname.py来启动脚本,则可能与主脚本不同。__file__通常是你比较安全的赌注。


只有当您在Python程序的"主"脚本中时,情况才是一样的。如果导入其他文件,__file__将包含该文件的路径,但sys.argv仍将保留相同的值。


就像斯文说的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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__被文件名替换了。在Python中,我不确定100%的情况,但它是C/C++和Perl。在python中,这可能有所不同,因为__file__对于编译后的python文件(pyc也是正确的,而且该文件的内容中似乎没有文件名的任何痕迹。


实际上,argv[0]可能是脚本名或脚本+脚本名的完整路径,具体取决于操作系统。

以下是官方文档中的条目http://docs.python.org/py3k/library/sys.html sys.argv