我正在尝试设计一个Python脚本来控制一个用C编写的命令行模拟器程序,包括解析输出到屏幕上的值,并给出输入命令。
目前我已经能够捕获模拟器的初始启动输出,但在最后卡住了。
基本上我是这样设置的:我设置了子进程:
即使我在printf语句下方添加了fflush(stdout)语句(建议参考此处:catching stdout in realtime from subprocess),所有文本都打印完成后,程序仍然挂起。
我已经添加了一个异常处理程序,在检测到最后一行中的关键字时会中断循环,但这不是我想要的非常优雅的解决方案。
在此循环之后,我有一些代码用于向模拟器输入命令,我可以告诉您它们有效,因为如果我删除用于读取模拟器输出的代码,则发送的退出命令确实会退出模拟器。
似乎我看到的大多数示例都是人们启动子进程、捕获输出,并在进程退出后显示它。我需要捕获输出、显示输出,然后给出新的命令,显示下一个输出,而不退出子进程。
这里是否存在一些根本性的问题导致我的stdout出现问题?
目前我已经能够捕获模拟器的初始启动输出,但在最后卡住了。
基本上我是这样设置的:我设置了子进程:
proc = Popen('./sim1',stdin=PIPE,stdout=PIPE)
然后我有一个循环来处理输出并将其显示到屏幕上(这是为了测试目的,稍后我将从文本输出中取特定的值)。for line in iter(proce.stdout.readline,''):
print(line.rstrip())
即使我在printf语句下方添加了fflush(stdout)语句(建议参考此处:catching stdout in realtime from subprocess),所有文本都打印完成后,程序仍然挂起。
我已经添加了一个异常处理程序,在检测到最后一行中的关键字时会中断循环,但这不是我想要的非常优雅的解决方案。
在此循环之后,我有一些代码用于向模拟器输入命令,我可以告诉您它们有效,因为如果我删除用于读取模拟器输出的代码,则发送的退出命令确实会退出模拟器。
似乎我看到的大多数示例都是人们启动子进程、捕获输出,并在进程退出后显示它。我需要捕获输出、显示输出,然后给出新的命令,显示下一个输出,而不退出子进程。
这里是否存在一些根本性的问题导致我的stdout出现问题?