Skip to main content
 首页 » 编程设计

Python之运行进程并等待输出

2025年05月04日10cyq1162

我想运行一个程序,等待它的输出,向它发送输入并重复直到满足条件。

我所能找到的只是关于等待程序完成的问题,事实并非如此。该过程仍将运行,只是不会提供任何(新)输出。

程序输出在标准输出和日志文件中,两者都可以使用。
使用 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() 

事实上,“做某事”输入甚至在程序完成启动之前就被发送了多次。此外,在程序完成运行来自最后一次 while 迭代的命令之前读取日志文件。这导致它缓冲输入,所以即使在满足条件后我也会继续执行命令。

我可以在每个 stdin.write 之后使用 time.sleep 但由于执行每个命令所需的时间是可变的,因此我需要使用比必要时间更长的时间python 脚本速度较慢。此外,这是一个愚蠢的解决方案。

谢谢!

请您参考如下方法:

如果您使用的是 python3,则可以尝试更新您的代码以改用 subprocess.run。它应该等待您的任务完成并返回输出。