Is there any difference between:
__file__
and
sys.argv[0]
Because both seem to be doing the same thing: they hold
__file__ is the name of the current file, which may be different from the main script if you are inside a module or if you start a script using execfile() rather than by invoking python scriptname.py. __file__ is generally your safer bet.
It's like Sven said.
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
I thought that __file__ was replaced with the filename during a preprocessor step. I was not 100 % sure that's actually the case in Python - but it is in C/C++ and Perl. In Python, this might be different as the __file__ is also correct for compiled Python files (pyc), and there doesn't seem to be any trace of the filename in that file's contents.
It's only the same if you are in the "main" script of your python programm. If you import other files, __file__ will contain the path to that file, but sys.argv will still hold the same values.
Actually argv[0] might be a script name or a full path to the script + script name, depending on the os.
Here's the entry in official documentation http://docs.python.org/py3k/library/sys.html#sys.argv