从python到cpp程序的进程间通信



假设有三个文件:f1.cpp、f2.py、f3.cpp。我在linux终端上运行的命令如下:

$./f1.out | python3 f2.py | ./f3.out

f1的输出完全进入f2的输入。此外,f2的输出完全进入f3。我正在f3中显示输出。f1在特定间隔之后生成用于f2的输入。在这个间隔中,我需要在f3文件中输入一个用户输入,这样它就可以在暂停期间给出相应的输出。我试着调试我的代码,发现尽管我的最终输出(没有用户输入(是由f3生成的,但我的用户输入并没有被读取。有人帮忙!!

由于您已经从命令中声明f3应该从f2的输出中获取输入,f2应该从f1的输出中获得输入,因此现在没有直接的方法将控制台输入提供给f3。

这里最好的方法是(假设你也是f1和f2的作者(你可以只读取f1中的用户输入,并立即打印

cin >> input;
cout << input;

使得它将被传递到f2的输入端。你也可以在f2 中做类似的事情

inp = str(input)
print(inp)

因此,按照您的意愿将其传递给f3。

但如果你不想这样做,或者你不是f1和f2的作者,我建议你在一个单独的终端窗口中启动f3,并使用命名管道(FIFO(在f2和f3之间进行通信。由于通信将通过FIFO进行,所以stdin仍然指向键盘,您可以向f3输入。

编辑

另一种方法是(尽管,我不确定这有多健康(,你可以在睡觉前生成一个新线程。在新线程中获取输入,并在获取输入后终止该新线程。只要没有给出输入,新线程就会运行。在主线程睡眠5秒钟后,当主线程唤醒时,使用类似pthread_kill的方法强制终止新线程。

最新更新