os.chdir позволяет вам изменить рабочий каталог по вашему желанию (вы можете извлечь рабочий каталог cfg_path
с помощью os.path.dirname
); Обязательно сначала получите текущий каталог с os.getcwd , если хотите восстановить его, когда закончите выполнение cfg_path
.
Python 3 действительно удаляет execfile
(в пользу последовательности, в которой вы читаете файл, compile
содержимое, затем exec
их), но вам не нужно беспокоиться об этом, если вы в данный момент кодируете в Python 2.6, поскольку перевод «источник-источник» 2to3 обрабатывает все это плавно и без проблем.
Редактировать : ОП говорит в комментарии, что execfile
запускает отдельный процесс и не учитывает текущий рабочий каталог. Это неверно, и вот пример, показывающий, что это:
import os
def makeascript(where):
f = open(where, 'w')
f.write('import os\nprint "Dir in file:", os.getcwd()\n')
f.close()
def main():
where = '/tmp/bah.py'
makeascript(where)
execfile(where)
os.chdir('/tmp')
execfile(where)
if __name__ == '__main__':
main()
Запуск этого на моей машине производит вывод, такой как:
Dir in file: /Users/aleax/stko
Dir in file: /private/tmp
ясно показывает, что execfile
действительно продолжает использовать рабочий каталог, установленный во время выполнения execfile
. (Если исполняемый файл изменяет рабочий каталог, это будет отражено после возврата execfile
- именно потому, что все * происходит в одном и том же процессе!).
Итак, все проблемы, которые ОП все еще наблюдает, не привязаны к текущему рабочему каталогу (трудно определить, какими они могут быть на самом деле, не видя код и точные детали обнаруженных проблем; -.)