Python子进程与二进制文件交互

时间:2019-03-17 01:09:56

标签: python subprocess

我想通过发送一些输入与二进制文件进行交互,然后打印生成的输出。

二进制文件本身是这样的:

binary.exe
Please enter the input
abcd
generated_output

二进制文件使用INT 21中断读取输入,因此无需在输入末尾向二进制文件发送换行符。只要输入的长度与所需的长度匹配,二进制文件就会自动生成输出。输入的长度必须为10个字符。

注意:二进制使用INT 21中断从stdin一次读取一个输入字符。因此,它将在输入标准输入时处理输入的每个字符。在stdin中键入第10个字符后,立即生成输出。

我想记录输出。

到目前为止,我只能使用子过程check_output来获取二进制文件的输出,该二进制文件显示“请输入输入”,如下所示:

#! /usr/bin/python

from subprocess import check_output
import sys

p = sys.argv[1]

result = check_output(p, shell=True)

print result

上面的代码不会返回,因为二进制文件正在等待将输入传递给它。

如果在命令行中按“ Ctrl + C”,则二进制输出的第一行将显示为:

“请输入输入内容。”

此后,我想将输入传递给二进制文件并将生成的输出记录到文件中。

1 个答案:

答案 0 :(得分:0)

二进制文件正在挂起,等待从STDIN中读取数据,因此您需要为其提供一些输入。为此,您需要使用from subprocess import Popen, PIPE proc = Popen('binary.exe', stdin=PIPE, stdout=PIPE) print(proc.communicate('your input')) 。例如:

(x += 1) %= 10