c++ Popen从python到Cpp的过程

wbgh16ku  于 2022-11-27  发布在  Python
关注(0)|答案(1)|浏览(221)

我正在尝试创建一个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;
}

这是可以实现的吗?

elcex8rz

elcex8rz1#

这里有两个问题。第一个是python脚本在子进程有机会运行之前就终止了它。第二个是您通过管道将stdout和err传输到DEVNULL,因此即使它确实运行了,您也不会看到任何东西。通常,当您完成与子进程的通信时,你关闭了stdin。2子进程可以随意读取stdin,并在输入结束时自然地发现关闭。3然后等待它退出。

#!/usr/bin/env python3
#test.py
import subprocess

p = subprocess.Popen('./wc',bufsize=1,stdin=subprocess.PIPE, universal_newlines=True)

p.stdin.write('hello world\n')
p.stdin.write('hell world\n')
p.stdin.write('hel world\n')
p.stdin.close()
p.wait()

相关问题