如何在python中比较两个子进程输出值?

时间:2018-04-26 08:40:12

标签: python subprocess

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语句(subprocess ... == subprocess)。

请建议我一些解决方案

非常感谢

1 个答案:

答案 0 :(得分:1)

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调用。 Ex 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()

现在比较返回代码&输出。