Как запустить двоичный исполняемый файл с входным файлом (команда bash) в Python? - PullRequest
2 голосов
/ 19 апреля 2020

У меня есть двоичный исполняемый файл с именем "ab c" , и у меня есть входной файл с именем "input.txt" . Я могу запустить их с помощью следующей команды bash:

./abc < input.txt

Как я могу запустить эту команду bash в Python, я пробовал несколько способов, но я получил ошибки.

Редактировать: мне также нужно сохранить вывод команды.

Edit2:

Я решил таким образом, спасибо за помощь.

input_path = путь к input.txt файлу.

out = subprocess.Popen(["./abc"],stdin=open(input_path),stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
stdout,stderr = out.communicate()
print(stdout)

Ответы [ 3 ]

1 голос
/ 19 апреля 2020

использовать os.system

import os
os.system("echo test from shell");
0 голосов
/ 19 апреля 2020

Это можно сделать с помощью модуля os. Следующий код работает отлично.

import os

path = "path of the executable 'abc' and 'input.txt' file"
os.chdir(path)
os.system("./abc < input.txt")

Надеюсь, что это работает:)

0 голосов
/ 19 апреля 2020

Использование подпроцесса - лучший способ для вызова системных команд и исполняемых файлов. Он обеспечивает лучший контроль, чем os.system (), и предназначен для его замены. Ссылка на документацию python ниже предоставляет дополнительную информацию.

https://docs.python.org/3/library/subprocess.html

Вот фрагмент кода, который использует подпроцесс для чтения выходных данных из заголовка, чтобы вернуть первые 100 строк из текстового файла и обработать его строка. Это дает вам вывод (out) и любые ошибки (err).

mycmd = 'head -100 myfile.txt'
(out, err) = subprocess.Popen(mycmd, stdout=subprocess.PIPE, shell=True).communicate()                                  
myrows = str(out.decode("utf-8")).split("\n")                                                                           
for myrow in myrows: 
    # do something with myrow
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...