Как сделать вызов исполняемого файла из скрипта Python? - PullRequest
16 голосов
/ 19 марта 2010

Мне нужно выполнить этот скрипт из моего скрипта Python.

Возможно ли это? Скрипт генерирует несколько выходных данных с записью некоторых файлов. Как мне получить доступ к этим файлам? Я пытался с функцией вызова подпроцесса, но безуспешно.

fx@fx-ubuntu:~/Documents/projects/foo$ bin/bar -c somefile.xml -d text.txt -r aString -f anotherString >output

Приложение "bar" также ссылается на некоторые библиотеки, оно также создает файл "bar.xml" помимо вывода. Как мне получить доступ к этим файлам? Просто с помощью open ()?

Спасибо,

Edit:

Ошибка времени выполнения Python - только эта строка.

$ python foo.py
bin/bar: bin/bar: cannot execute binary file

Ответы [ 3 ]

29 голосов
/ 19 марта 2010

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

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("path/to/output/file.txt"). Обратите внимание, что вам не нужно полагаться на подоболочку, чтобы перенаправить вывод в файл на диске с именем «output», если вы этого не хотите. Здесь я показываю, как напрямую прочитать вывод в вашу программу на Python, не переходя на диск между ними.

12 голосов
/ 19 марта 2010

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

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

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

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

6 голосов
/ 04 июня 2018

Для выполнения исполняемого файла Unix. Я сделал следующее в моем Mac OSX, и это сработало для меня:

import os
cmd = './darknet classifier predict data/baby.jpg'
so = os.popen(cmd).read()
print so

Здесь print so выводит результат.

...