Найдите путь к текущему петлянию

Как я могу найти полный путь к в настоящее время запускающему скрипту Python? То есть, что делает я должен сделать для достижения этого:

$ pwd
/tmp
$ python baz.py
running from /tmp 
file is baz.py
42
задан codeforester 1 August 2019 в 06:45
поделиться

6 ответов

__ file __ НЕ то, что вы ищете. Не используйте случайные побочные эффекты

sys.argv [0] всегда путь к сценарию (если на самом деле сценарий был запущен) - см. http : //docs.python.org/library/sys.html#sys. argv

__ файл __ - это путь к , выполняющемуся в данный момент файла (скрипта или модуля). Это случайно то же самое, что и сценарий, если он доступен из сценария! Если вы хотите поместить в библиотеку такие полезные вещи, как определение местоположения файлов ресурсов относительно местоположения скрипта, вы должны использовать sys.argv [0] .

Пример:

C:\junk\so>type \junk\so\scriptpath\script1.py
import sys, os
print "script: sys.argv[0] is", repr(sys.argv[0])
print "script: __file__ is", repr(__file__)
print "script: cwd is", repr(os.getcwd())
import whereutils
whereutils.show_where()

C:\junk\so>type \python26\lib\site-packages\whereutils.py
import sys, os
def show_where():
    print "show_where: sys.argv[0] is", repr(sys.argv[0])
    print "show_where: __file__ is", repr(__file__)
    print "show_where: cwd is", repr(os.getcwd())

C:\junk\so>\python26\python scriptpath\script1.py
script: sys.argv[0] is 'scriptpath\\script1.py'
script: __file__ is 'scriptpath\\script1.py'
script: cwd is 'C:\\junk\\so'
show_where: sys.argv[0] is 'scriptpath\\script1.py'
show_where: __file__ is 'C:\\python26\\lib\\site-packages\\whereutils.pyc'
show_where: cwd is 'C:\\junk\\so'
70
ответ дан 26 November 2019 в 23:31
поделиться

Это напечатает каталог, в котором находится сценарий (в отличие от рабочего каталога ):

import os
dirname, filename = os.path.split(os.path.abspath(__file__))
print "running from", dirname
print "file is", filename

Вот как он себя ведет, когда я помещаю его в c: \ src :

> cd c:\src
> python so-where.py
running from C:\src
file is so-where.py

> cd c:\
> python src\so-where.py
running from C:\src
file is so-where.py
19
ответ дан 26 November 2019 в 23:31
поделиться
import sys, os

file = sys.argv[0]
pathname = os.path.dirname(file)
print 'running from %s' % os.path.abspath(pathname)
print 'file is %s' % file

Проверить os.getcwd () ( docs )

5
ответ дан 26 November 2019 в 23:31
поделиться

Текущий файл всегда __ file __ .

Вот демонстрационный скрипт с именем identify.py

print __file__

Вот результаты

MacBook-5:Projects slott$ python StackOverflow/identify.py 
StackOverflow/identify.py
MacBook-5:Projects slott$ cd StackOverflow/
MacBook-5:StackOverflow slott$ python identify.py 
identify.py
3
ответ дан 26 November 2019 в 23:31
поделиться

Имя сценария (всегда?) Будет первым индексом sys.argv:

import sys
print sys.argv[0]

Еще более простой способ найти путь к вашему запущенному сценарию:

os.path.dirname(sys.argv[0])
2
ответ дан 26 November 2019 в 23:31
поделиться

Я бы посоветовал

import os, sys
print os.path.split(os.path.abspath(os.path.realpath(sys.argv[0])))[0]

Таким образом вы можете безопасно создавать символические ссылки на исполняемый файл скрипта, и он все равно найдет правильный каталог.

3
ответ дан 26 November 2019 в 23:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: