Python: подпроцесс с различным рабочим каталогом

У меня есть python script, который находится в этом каталоге:

work/project/test/a.py

Внутри a.py я использую subprocess.POPEN для запуска процесса из другого каталога,

work/to_launch/file1.pl, file2.py, file3.py, ...

Код Python:

subprocess.POPEN("usr/bin/perl ../to_launch/file1.pl") 

и в разделе work/project/, я набираю следующий

[[email protected] project]python test/a.py,

error "file2.py," Нет такого файла или каталога "

Как добавить work/to_launch/, чтобы можно было найти эти зависимые файлы file2.py?

Ответы

Ответ 1

Ваш код не работает, потому что относительный путь рассматривается относительно вашего текущего местоположения (на один уровень выше test/a.py).

В sys.path[0] у вас есть путь к текущему запуску script.

Используйте os.path.join(os.path.abspath(sys.path[0]), relPathToLaunch) с relPathToLaunch = '../to_launch/file1.pl', чтобы получить абсолютный путь к вашему file1.pl и запустите с ним perl.

EDIT: если вы хотите запустить file1.pl из своего каталога, а затем вернуться назад, просто запомните свой текущий рабочий каталог и затем вернитесь:

origWD = os.getcwd() # remember our original working directory

os.chdir(os.path.join(os.path.abspath(sys.path[0]), relPathToLaunch))
subprocess.POPEN("usr/bin/perl ./file1.pl") 
[...]

os.chdir(origWD) # get back to our original working directory

Ответ 3

Вы можете использовать этот код для установки текущего каталога:

import os
os.chdir("/path/to/your/files")