Я должен выполнить этот сценарий из своего сценария Python.
Действительно ли это возможно? Сценарий генерирует некоторые выводы с некоторыми записанными файлами. Как я получаю доступ к этим файлам? Я попробовал подпроцессом, вызывают функцию, но без успеха.
fx@fx-ubuntu:~/Documents/projects/foo$ bin/bar -c somefile.xml -d text.txt -r aString -f anotherString >output
Приложение "запрещает" также ссылки на некоторые библиотеки, оно также создает файл "bar.xml" помимо вывода. Как я получаю доступ к этим файлам? Только при помощи открытого ()?
Спасибо,
Править:
Ошибка от времени выполнения Python является только этой строкой.
$ python foo.py
bin/bar: bin/bar: cannot execute binary file
Для выполнения внешней программы сделайте следующее:
import subprocess
args = ("bin/bar", "-c", "somefile.xml", "-d", "text.txt", "-r", "aString", "-f", "anotherString")
#Or just:
#args = "bin/bar -c somefile.xml -d text.txt -r aString -f anotherString".split()
popen = subprocess.Popen(args, stdout=subprocess.PIPE)
popen.wait()
output = popen.stdout.read()
print output
И да, при условии, что ваша программа bin / bar
записала еще несколько различных файлов на диск, вы можете открыть их как обычно с помощью open ("путь / к / output / file.txt")
. Обратите внимание, что вам не нужно полагаться на подоболочку для перенаправления вывода в файл на диске с именем «output», если вы этого не хотите. Я показываю здесь, как напрямую считывать вывод в вашу программу Python, не переходя между ними на диск.
Самый простой способ:
import os
cmd = 'bin/bar --option --otheroption'
os.system(cmd) # returns the exit status
Вы получаете доступ к файлам обычным способом, используя open ()
.
Если вам нужно выполнить более сложное управление подпроцессами, тогда вам подойдет модуль subprocess .