newbie question: how to get directory of script?

Nicodemus nicodemus at globalite.com.br
Sun Nov 24 00:49:27 EST 2002


os.path.abspath(sys.path[0])
works fine in Windows XP, either executing the script as:

[d:\temp]python myscript.py
or
[d:\temp]myscript.py

I'm not sure about other plataforms, though.

Note: If the script is in the current working dir, then sys.path[0] 
returns the empty string.

Bengt Richter wrote:

>On 12 Nov 2002 09:57:43 -0800, animeshk at yahoo.com (animeshk) wrote:
>
>  
>
>>I'm sure this has been asked and answered a few zillion times: sorry!
>>
>>I want to be able to get the path of the script I am running (the idea
>>is that I might have a data file or an ini file sitting in the same
>>directory as the py file).  Okay . . . so how do I get it?  BTW, I am
>>running Python 2.2.2 under Windows XP, with the wincom extensions.
>>
>>The docs said that sys.argv[0] should have the name of the script and,
>>depending on the platform, the full path.  Nope: sys.argv[0] has the
>>full path of python.exe (this is occurring within the Wing IDE
>>environment, within PythonWin, and even from the command line).
>>
>>The docs also said that sys.path[0] should have the directory of the
>>script.  Again, nope: it has the directory of python.exe.  However, I
>>saw the directory of the script in sys.path[1].  Problem: this works
>>fine from the command line and from within the Wing IDE, but not in
>>PythonWin (PythonWin sets sys.path[1] to '').
>>
>>So . . . is there some "official"/"safe"/"standard" way of getting
>>this information?  Thanks!
>>    
>>
>
>os.path.abspath(sys.argv[0]) would be my guess for the executing script.
>
>What does the following do when you run it on your system from the
>command line? On NT4 with Python 2.2.2, if I invoke it with python
>or by file association with the script name only, I get the same output
>to both screen and the junk.txt file. If I substitute pythonw in place
>of python with the rest the same, there is no output to the screen, but
>the file output is the same.
>
># pathtest.py
>if __name__ == '__main__':
>    import sys, os
>    f = file('junk.txt','w', 0)
>    print 'argv =', sys.argv
>    f.write('argv = %s\n' % sys.argv)
>    i = 0
>    for arg in sys.argv:
>        print '%2d: %s' % (i, os.path.abspath(arg))
>        f.write('%2d: %s\n' % (i, os.path.abspath(arg)))
>        i = i + 1
>    f.close()
>
>Regards,
>Bengt Richter
>  
>







More information about the Python-list mailing list