我正在尝试为一段代码编写一些基本测试,该代码通常通过 stdin 无休止地接受输入,直到给出特定的退出命令。
我想检查程序是否在给出一些输入字符串时崩溃(经过一段时间来考虑处理),但似乎无法弄清楚如何发送数据而不是陷入等待我不知道的输出关心。
我当前的代码如下所示(使用cat
作为程序的示例):
myproc = subprocess.Popen(['cat'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
myproc.communicate(input=inputdata.encode("utf-8"))
time.sleep(0.1)
if myproc.poll() != None:
print("not running")
else:
print("still running")
我如何修改它以允许程序继续轮询而不是在轮询后挂起communicate()
call?
您在这里使用了错误的工具communicate
等待程序结束。您应该简单地提供子流程的标准输入:
myproc = subprocess.Popen(['cat'], stdin=subprocess.PIPE, stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
myproc.stdin.write(inputdata.encode("utf-8"))
time.sleep(0.1)
if myproc.poll() != None:
print("not running")
else:
print("still running")
但要注意:您无法确定输出管道在子进程结束之前将包含任何内容......
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)