Как сравнить два выходных значения подпроцесса в Python? - PullRequest
0 голосов
/ 26 апреля 2018

Код Python:

filename = open("file.txt", "r")
subprocess.call(["./a.out" , "0-9"]), stdin= fin) #1
subprocess.call(["./a.out, "0123456789"], stdin = fin) #2

Здесь я хотел сравнить обе команды с помощью оператора if. 1) Я назначил разные переменные и попытался сравнить их, и это не работает. 2) Я также пытался сравнить оператор if (подпроцесс ... == подпроцесс).

Пожалуйста, предложите мне какое-нибудь решение

Спасибо за продвижение

1 Ответ

0 голосов
/ 26 апреля 2018

call не фиксирует вывод. Он просто возвращает код возврата процесса. Если оба равны 0, сравнение всегда успешно.

Вам нужно check_output вместо:

output1 = subprocess.check_output(["./a.out" , "0-9"]), stdin= fin) #1
output2 = subprocess.check_output(["./a.out", "0123456789"], stdin = fin) #2

if output1 == output2:
    # do smth

check_output возвращает результат, только если команда завершается с нулевым кодом возврата. Если это не так, вам придется использовать subprocess.Popen и читать вывод вручную, или в python 3.5+ общий вызов suprocess.run. Например, с Popen:

p1 = subprocess.Popen(["./a.out" , "0-9"]), stdin= fin, stdout=subprocess.PIPE) #1
p2 = subprocess.Popen(["./a.out", "0123456789"], stdin = fin, stdout=subprocess.PIPE) #2
output1 = p1.stdout.read()
output2 = p2.stdout.read()
rc1 = p1.wait()
rc2 = p2.wait()

Теперь сравните коды возврата и выходы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...