我想运行一个程序,等待它的输出,向其发送输入并重复此过程直到满足某个条件。
我找到的所有问题都是关于等待程序完成的,但这不是我的情况。该进程仍将继续运行,只是不会提供任何(新的)输出。
程序输出在stdout和日志文件中,可以使用其中任意一个。
使用Linux。
目前的代码:
目前,“做某事”输入在程序启动之前被发送多次。此外,在程序完成最后一次迭代的命令之前,日志文件就已经被读取了。这导致它缓冲了输入,因此在满足条件后,即使在条件已经达到后,它仍会继续执行命令,这是不合理的。
我可以在每个stdin.write之后使用time.sleep,但由于执行每个命令所需的时间是可变的,我需要使用比必要时间更长的时间,从而使python脚本变慢。这也是一个愚蠢的解决方案。
谢谢!
我找到的所有问题都是关于等待程序完成的,但这不是我的情况。该进程仍将继续运行,只是不会提供任何(新的)输出。
程序输出在stdout和日志文件中,可以使用其中任意一个。
使用Linux。
目前的代码:
import subprocess
flag = True
vsim = subprocess.popen(['./run_vsim'],
stdin=subprocess.pipe,
shell=true,
cwd='path/to/program')
while flag:
with open(log_file), 'r') as f:
for l in f:
if condition:
break
vsim.stdin.write(b'do something\n')
vsim.stdin.flush()
vsim.stdin.write(b'do something else\n')
vsim.stdin.flush()
目前,“做某事”输入在程序启动之前被发送多次。此外,在程序完成最后一次迭代的命令之前,日志文件就已经被读取了。这导致它缓冲了输入,因此在满足条件后,即使在条件已经达到后,它仍会继续执行命令,这是不合理的。
我可以在每个stdin.write之后使用time.sleep,但由于执行每个命令所需的时间是可变的,我需要使用比必要时间更长的时间,从而使python脚本变慢。这也是一个愚蠢的解决方案。
谢谢!
pexpect
。 - Linuxios