Ответ 1
За большой Погружение в Python:
import sys, os
print 'sys.argv[0] =', sys.argv[0] 1
pathname = os.path.dirname(sys.argv[0]) 2
print 'path =', pathname
print 'full path =', os.path.abspath(pathname)
My script.py создает временный файл в том же каталоге, что и script.
При запуске:
python script.py
работает только файл
но при запуске он не работает:
python /path/to/script.py
Это потому, что я использую относительный путь к моему временному файлу в script.py, а не в абсолютном. Проблема в том, что я не знаю, в каком пути он будет работать, поэтому мне нужен способ, чтобы узнать об этом динамически.
Как насчет?
os.path.abspath(os.path.dirname(__file__))
За большой Погружение в Python:
import sys, os
print 'sys.argv[0] =', sys.argv[0] 1
pathname = os.path.dirname(sys.argv[0]) 2
print 'path =', pathname
print 'full path =', os.path.abspath(pathname)
Два текущих ответа отражают двусмысленность вашего вопроса.
Когда вы запустили python /path/to/script.py
, где вам нужен ваш tempfile? В текущем каталоге (./tempfile.txt
) или в /path/to/tempfile.txt
?
Если первое, вы можете просто использовать относительный путь (или, для странных и тайных целей, получить абсолютный путь, эквивалентный текущему каталогу, как предлагает @Desintegr, с помощью os.getcwd
).
Если последнее, вы можете узнать, как именно script был вызван с помощью sys.argv[0]
, как предлагает @Jonathan, и манипулировать этим путем с функциями в os.path
(конечно, вы также можете применить эти функции к тому, что os.getcwd
возвращает, если применяется прежний случай) или работает с os.path.dirname(__file__)
и т.п. (последнее необходимо, если вы хотите, чтобы это последнее поведение также при импортировании script в качестве модуля, а не только когда оно выполнялось как main script).
Вы можете использовать метод os.getcwd(), чтобы узнать текущий рабочий каталог.
Return a string representing the current working directory. Availability: Unix, Windows.
Вы можете использовать os.chdir(путь) для изменения текущего рабочего каталога.
Change the current working directory to path. Availability: Unix, Windows.