python - 使用 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++程序发送一些输入)
解决方案
推荐阅读
- javascript - 在fabric js中动态再现背景
- javascript - 根据在另一个页面中输入的值更新表值的功能
- javascript - 监视模拟服务人员(msw)?
- bash - 如何组合多个 awk 命令并用空格打印
- r - 如何将一个字符列分成两列?
- javascript - 未能在“CustomElementRegistry”上执行“定义”:
- amp-html - 如何在 AMP 应用程序中连接 RSS 提要
- flutter - Flutter 命令 - Powershell.exe 不在 PATH 错误消息中
- python - 如何应用 node2vec 构建链路预测模型
- c++ - 在 CUDA 中获取纹理对象