我正在尝试创建一个python脚本,该脚本将lines
发送到一个在while循环上运行的cpp文件中,并将接收到的行打印到控制台中。
测试.py
#test.py
import subprocess
p = subprocess.Popen('./stdin.out',bufsize=1,stdin=subprocess.PIPE,stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL, universal_newlines=True)
p.stdin.write('hello world\n')
p.stdin.write('hell world\n')
p.stdin.write('hel world\n')
p.terminate()
标准输入.cpp
//stdin.cpp
#include <iostream>
int main(){
std::string line;
std::cout << "Hello World! from C++" << std::endl;
while (getline(std::cin, line)) {
std::cout <<"Received from python:" << line << std::endl;
}
return 0;
}
这是可以实现的吗?
1条答案
按热度按时间elcex8rz1#
这里有两个问题。第一个是python脚本在子进程有机会运行之前就终止了它。第二个是您通过管道将stdout和err传输到DEVNULL,因此即使它确实运行了,您也不会看到任何东西。通常,当您完成与子进程的通信时,你关闭了stdin。2子进程可以随意读取stdin,并在输入结束时自然地发现关闭。3然后等待它退出。