2013-07-18 1 views
0

У меня есть скрипт python со следующим кодом.dump файлы из сценария bash в другой директории, откуда запускался скрипт python

Python script: /path/to/pythonfile/ 
Executable: /path/to/executable/ 
Desired Output Path: /path/to/output/ 

Моя первая догадка ...

import subprocess 

exec = "/path/to/executable/executable" 
cdwrite = "cd /path/to/output/" 

subprocess.call([cdwrite], shell=True) 
subprocess.call([exec], shell=True) 

Это сбрасывает все файлы в /path/to/pythonfile/ ... Я имею в виду это имеет смысл, но я не уверен, что «эго», чтобы предположить - что мой код моего питона или сценарий оболочки, я думал, что он работает в оболочке, поэтому, если я cd в оболочке, он будет cd в каталог, необходимый и выгрузит вывод там?

ответ

2

Что происходит, две команды выполняется независимо друг от друга. То, что вы хотите сделать, это cd в каталог, а затем выполнить.

subprocess.call(';'.join([cdwrite, exec]), shell=True) 

Вы используете сценарий в том же каталоге, что и файл python? С тем, что вы имеете прямо сейчас, файлы должны выводиться в каталог, в котором вы запускали скрипт python (который может быть или не быть каталогом со сценарием). Это также означает, что если путь вы даете cd относительна, она будет относительно каталога вы запускали скрипт питона в

0

Вы должны изменить каталог в одной и той же команды:

cmd = "/path/to/executable/executable" 
outputdir = "/path/to/output/" 
subprocess.call("cd {} && {}".format(outputdir, cmd), shell=True) 
0

Вы можете использовать cwd аргумент:.

from subprocess import check_call 

cmd = "/path/to/executable/executable" 
check_call([cmd], cwd="/path/to/output") 

Примечание: не используйте shell=True излишне.

Смежные вопросы