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

问题描述 投票:0回答:1

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

二进制本身的工作原理如下:

binary.exe
Please enter the input
abcd
generated_output

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

注意:Binary使用INT 21中断从stdin一次读取输入的一个字符。因此,它在输入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”,则二进制输出的第一行打印为:

“请输入输入”。

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

python subprocess
1个回答
0
投票

二进制文件正在等待从STDIN读取,所以你需要提供一些输入。要做到这一点,你需要使用Popen。例如:

from subprocess import Popen, PIPE

proc = Popen('binary.exe', stdin=PIPE, stdout=PIPE)
print(proc.communicate('your input'))
© www.soinside.com 2019 - 2024. All rights reserved.