Как запустить скрипт bash внутри Python, но действовать так, как будто он запускается из другого каталога? - PullRequest
5 голосов
/ 29 января 2011
subprocess.call(["/home/blah/trunk/blah/run.sh", "/tmp/ad_xml", "/tmp/video_xml"])

Я делаю это. Однако внутри моего run.sh у меня есть «относительные» пути. Итак, я должен «CD» в этот каталог, а затем запустить сценарий оболочки. Как мне это сделать?

Ответы [ 4 ]

12 голосов
/ 29 января 2011

Используйте аргумент cwd для subprocess.call()

Из документов здесь: http://docs.python.org/library/subprocess.html

Если cwd не None, ребенок текущий каталог будет изменен на cwd до его выполнения. Обратите внимание, что этот каталог не считается, когда поиск исполняемого файла, так что вы не можете укажите путь к программе относительно cwd.

Пример:

subprocess.call(["/home/blah/trunk/blah/run.sh", "/tmp/ad_xml", "/tmp/video_xml"], cwd='/tmp')
1 голос
/ 29 января 2011

Вы можете указать свой рабочий каталог:

subprocess.call (["/ home / blah / trunk / blah / run.sh", "/ tmp / ad_xml", "/tmp / video_xml "], cwd =" / home / бла / хобот / бла ")

1 голос
/ 29 января 2011

Ну, вы можете использовать subprocess.Popen с Shell = True и cwd = "Ваш желаемый рабочий каталог"

EDIT: Похоже, что вызов имеетте же аргументы, так что просто установка аргумента cwd будет работать:

subprocess.call(["/home/blah/trunk/blah/run.sh", "/tmp/ad_xml", "/tmp/video_xml"], cwd="PATH")
0 голосов
/ 29 января 2011
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...