Как позвонить исполняемому файлу из сценария Python?

Я должен выполнить этот сценарий из своего сценария 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
16
задан fx. 19 March 2010 в 12:03
поделиться

2 ответа

Для выполнения внешней программы сделайте следующее:

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, не переходя между ними на диск.

29
ответ дан 30 November 2019 в 15:40
поделиться

Самый простой способ:

import os
cmd = 'bin/bar --option --otheroption'
os.system(cmd) # returns the exit status

Вы получаете доступ к файлам обычным способом, используя open () .

Если вам нужно выполнить более сложное управление подпроцессами, тогда вам подойдет модуль subprocess .

15
ответ дан 30 November 2019 в 15:40
поделиться
Другие вопросы по тегам:

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