On Dec 12, 6:50 am, Matt Nordhoff <[EMAIL PROTECTED]> wrote: > ron.longo wrote: > > Nope, maybe I'm not explaining myself well. > > > When I do os.getenv('HOME') I get back None. > > > According to the docs, 'HOME' is the user's home directory on some > > platforms. Which is not what I want. > > > What I want is the directory in which an application's main .py file > > resides. That is, when I type: python MyApp.py, I want to know in which > > directory does MyApp.py reside? > > Shane is right. > > >>> print __file__ > >>> print modulename.__file__ >
Shane is half-right by accident. __file__ is the path to the file currently being executed. The OP wanted to know "the directory in which an application's main .py file resides". Using __file__ will give the correct result *only* when used in that "main .py" file. If you have multiple applications and you want a common "where are my resources" function/ method in an imported module, __file__ is of no use. sys.argv[0] is your friend. C:\junk>type calledmodule.py import sys def print_filenames(): print "calledmodule: sys.argv[0] =", sys.argv[0] print "calledmodule: __file__ =", __file__ C:\junk>type whereami.py import sys, calledmodule print "script: sys.argv[0] =", sys.argv[0] print "script: __file__ =", __file__ calledmodule.print_filenames() C:\junk>whereami.py script: sys.argv[0] = C:\junk\whereami.py script: __file__ = C:\junk\whereami.py calledmodule: sys.argv[0] = C:\junk\whereami.py calledmodule: __file__ = C:\junk\calledmodule.pyc Note that "calledmodule" could quite easily have been in some other directory e.g. C:\Python25\Lib\site-packages\calledmodule \calledmodule.pyc If you later want to use py2exe, you'll have to work a little bit harder, but it still doesn't involve __file__. Cheers, John -- http://mail.python.org/mailman/listinfo/python-list