Python: execfile из рабочего каталога другого файла?

Если Ваша компания не довольна лицензией LGPL, Вы могли бы хотеть проверить Прогресс Звуковой ESB, или ArtixDS (недавно полученный), TIBCO ActiveWhatever или Oracle/BEA Aqualogic. Возможности - Вы, уже используют что-то от этих компаний, и можно получить достойную скидку.

7
задан Kyle Kaitan 28 November 2009 в 19:19
поделиться

1 ответ

os.chdir позволяет вам изменить рабочий каталог по вашему желанию (вы можете извлечь рабочий каталог cfg_path с помощью os.path.dirname ); обязательно сначала получите текущий каталог с помощью os.getcwd , если вы хотите восстановить его, когда закончите выполнение cfg_path .

Python 3 действительно удаляет ] execfile (в пользу последовательности, в которой вы читаете файл, компилируете содержимое, затем exec их), но вам не нужно беспокоиться об этом, если вы в настоящее время кодируется на Python 2.6, поскольку источник 2to3 для перевода исходного кода справляется со всем этим плавно и без проблем.

Изменить : OP говорит в комментарии, тот 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 - именно потому, что все происходит в одном процессе!)

Итак, что угодно проблемы, которые все еще наблюдает OP, не привязаны к текущему рабочему каталогу (трудно диагностировать, чем они могут быть на самом деле, не видя кода и точных деталей наблюдаемых проблем; -).

s пример, показывающий, что это:

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 - именно потому, что все происходит в одном процессе!)

Итак, что угодно проблемы, которые все еще наблюдает OP, не привязаны к текущему рабочему каталогу (трудно диагностировать, чем они могут быть на самом деле, не видя кода и точных деталей наблюдаемых проблем; -).

s пример, показывающий, что это:

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 - именно потому, что все происходит в одном процессе!)

Итак, что угодно проблемы, которые все еще наблюдает OP, не привязаны к текущему рабочему каталогу (трудно диагностировать, чем они могут быть на самом деле, не видя кода и точных деталей наблюдаемых проблем; -).

Dir in file: /Users/aleax/stko
Dir in file: /private/tmp

ясно показывает, что execfile продолжает использовать рабочий каталог, установленный во время выполнения execfile . (Если исполняемый файл изменяет рабочий каталог, это отразится после возврата execfile - именно потому, что все происходит в одном процессе!)

Итак, что угодно проблемы, которые OP все еще наблюдает, не привязаны к текущему рабочему каталогу (трудно диагностировать, что они могут быть на самом деле, не видя кода и точных деталей наблюдаемых проблем; -).

Dir in file: /Users/aleax/stko
Dir in file: /private/tmp

ясно показывает, что execfile продолжает использовать рабочий каталог, установленный во время выполнения execfile . (Если исполняемый файл изменяет рабочий каталог, это отразится после возврата execfile - именно потому, что все происходит в одном процессе!)

Итак, что угодно проблемы, которые все еще наблюдает OP, не привязаны к текущему рабочему каталогу (трудно диагностировать, чем они могут быть на самом деле, не видя кода и точных деталей наблюдаемых проблем; -).

7
ответ дан 7 December 2019 в 07:46
поделиться
Другие вопросы по тегам:

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