首页 > 解决方案 > 使用 subprocess.popen 与命令行程序交互时如何处理系统(“暂停”)

问题描述

我正在尝试使用 python 与 c++ 程序进行交互。

想象一下 c++ 程序看起来像这样:

#include <iostream>

int main(){
    std::cout << "something" <<std::endl;
    std::cout << "something else\n";
    system("pause");
    std::cout << "result\n";
    std::cout << "something" <<std::endl;
    return 0;
}

我希望我的 python 脚本执行 c++ 程序并监听它的输出,直到它得到结果。我目前的解决方案如下所示:

import subprocess
proc = subprocess.Popen("testc.exe",stdin=subprocess.PIPE, stdout=subprocess.PIPE)
while True:
    line = proc.stdout.readline().decode('utf-8')
    print(line)
    if "result" in line:
        print("success!")
        proc.terminate()
        break

只要 c++ 代码中没有 system("pause") 就可以工作。但是,使用 system("pause") 调用时,python 脚本会挂在读取行上。

当我无法更改 c++ 程序的源代码时,我该如何处理?我不想使用communicate(),因为这样我就不能实时对每一行做出反应(并且fe向c++程序发送一些输入)

标签: pythonc++subprocesspopen

解决方案


推荐阅读