我正在使用PolarSSL库,并希望自动化一些测试。 PolarSSL提供了一个命令行可执行文件(selftest.exe
),它可以自动执行大量测试,但我想将它与我的Python程序连接起来。基本上,我想阅读其输出并将其存储为字符串以供进一步调查。
然而,当selftest.exe
完成后,它会要求用户按[ENTER]
退出程序,因此,通过subprocess.Popen
调用此过程不起作用,因为它永远挂起直到用户按下[ENTER]
,这是他永远不会的。
虽然我认为在合适的时间发送击键是不合理的,但我想到了超时,比如“在XXX秒之后,发送”\ n“并将进程的标准输出存储在一个字符串“,其中XXX足以让我获得所有结果。
这是一个可行的想法,还是有一个“更清洁”的想法来处理一般的交互式程序?
编辑(由于声誉不佳,我无法发表评论):第一个答案是正确的,只要按下回车,程序就会退出。但是,调用p.communicate(input='\n')
会导致以下错误:'str'不支持缓冲区接口。您需要拨打p.communicate(input=b'\n')
。
答案 0 :(得分:1)
也许这是一个愚蠢的问题,你可能已经这样做了,但是你确定只是发送了" \ n"这个过程不会起作用吗?我会说selftest.exe
可能在[ENTER]
完成后才真正阅读SIGQUIT
。当然,这取决于程序如何读取输入。您也可以尝试发送SIGTERM
或{{1}},因此可能该程序将优雅地处理它们。