Рассмотрим следующий код на языке Python:
import os
print os.getcwd()
Я использую os.getcwd()
для получения местоположения каталога файла скрипта. Когда я запускаю скрипт из командной строки, он дает мне правильный путь, в то время как когда я запускаю его из скрипта, запущенного кодом в представлении Django, он выводит /
.
Как я могу получить путь к скрипту из скрипта, запущенного в представлении Django?
UPDATE:
Суммируя ответы на данный момент - os.getcwd()
и os.path.abspath()
оба дают текущий рабочий каталог, который может быть или не быть каталогом, в котором находится скрипт. В настройках моего хоста
дает только имя файла без пути.__file__
Есть ли в Python способ (всегда) получать путь, в котором находится скрипт?
Вам нужно позвонить ОС.путь.реального пути
на __файл__
, так что, когда __file__, что
это имя файла без пути, вы все равно получите реж пути:
import os
print(os.path.dirname(os.path.realpath(__file__)))
Попробуй в sys.путь[0]`.
Цитата из питона документы:
как инициализируется при запуске программы, первым пунктом этого списка,
путь[0]
- это каталог, содержащий сценарий, который был использован для вызова интерпретатора Python. Если каталог сценариев недоступен (например, если переводчик вызывается в интерактивном режиме или если скрипт читается из стандартного ввода),путь[0]
является пустой строкой, которая направляет Python для поисковых модулей в текущем каталоге первый. Обратите внимание, что в каталоге скрипта вставляется перед записи вставлен в результатеPYTHONPATH
.
Я использую:
import os
import sys
def get_script_path():
return os.path.dirname(os.path.realpath(sys.argv[0]))
Как указывает aiham в комментарии, вы можете определить эту функцию в модуле и использовать ее в разных скриптах.
Этот код:
import os
dn = os.path.dirname(os.path.realpath(__file__))
запах мяты наборы;ду&; имя каталога, в котором в настоящий момент выполняющийся скрипт. Этот код:
fn = os.path.join(dn,"vcb.init")
fp = open(fn,"r")
устанавливает, что "НС" до "и script_dir/vсв.инит" (в независимым от платформы способом) и открывает это файл для чтения на настоящий момент выполняющийся скрипт.
Обратите внимание, что "в настоящий момент выполняющийся скрипт" это несколько двусмысленно. Если вся ваша программа состоит из 1 скрипта, то, что's в настоящее время выполнение скрипта и "как sys.путь[0]" и решение работает отлично. Но если ваше приложение состоит из скрипта, который импортирует пакет с "Р" и затем вызывает скрипт на "Б" и "по п. б", которая в данный момент выполняет. Если вам нужно получить содержащий каталог "в п. б" и, вы хотите в "ОС.путь.(__файл__) в
" реального пути; решение.
Аскорутин__файл__
" просто содержит имя выполняемой в данный момент (верхнем уровне) сценарий: " У;Х.пы-то". Это не'т
дать какие-либо пути информация. Это'ы "и ОС.путь.реального пути" и вызов, который делает реальную работу.
Это работало для меня (и я его нашел через Это сайте StackOverflow Вопрос)
os.path.realpath(__file__)
Здесь's то, что я закончилась. Это работает для меня, если я импортирую мой скрипт в интерпретаторе, а также, если я выполнить его как скрипт:
import os
import sys
# Returns the directory the current script (or interpreter) is running in
def get_script_directory():
path = os.path.realpath(sys.argv[0])
if os.path.isdir(path):
return path
else:
return os.path.dirname(path)
Это очень старая нить, но я'вэ были с этой проблемой при попытке сохранения файлов в текущей директории скрипта в при запуске Python-скрипт из cron. функция getcwd() и много другого пути придумать свой домашний каталог.
чтобы получить абсолютный путь к скрипту я
каталог = ОС.путь.abspath(ОС.путь.каталог(__файл__))
Попробуйте это:
def get_script_path(for_file = None):
path = os.path.dirname(os.path.realpath(sys.argv[0] or 'something'))
return path if not for_file else os.path.join(path, for_file)