0

一个 python 程序打开了一个 C++ 程序的新进程,并正在读取进程标准输出。到目前为止没有问题。

但是有可能有多个这样的流进行通信吗?如果我也滥用 stderr,我可以得到两个,但不能更多。破解它的简单方法是使用临时文件。有没有更优雅的东西不需要绕道文件系统?

PS:也欢迎*nix特定的解决方案

4

4 回答 4

2

在 unix 系统上;打开子进程的常用方法是 with fork(),这将在子进程和父进程中保留任何打开的文件描述符(代表打开文件或套接字的小整数),然后exec(),这也允许新的可执行文件使用文件描述符在旧进程中打开的。此功能保留在subprocess.Popen()调用中(可通过close_fds参数调整)。因此,您可能想要做的是使用os.pipe()创建成对的套接字进行通信,然后使用Popen()启动另一个进程,并使用先前调用返回的每个 fd 的参数pipe()来告诉它应该使用哪个 fd。

于 2012-06-22T21:58:10.710 回答
0

听起来你想要的是使用套接字进行通信。两种语言都允许打开原始套接字,但您可能还想查看zeromq项目,它对消息传递有一些额外的优势。在c++python中查看他们的 hello world 。

于 2012-06-22T21:47:23.240 回答
0

假设Windows机器。您可以尝试使用剪贴板在 python 进程和 C++ 之间交换信息。

分配一些唯一的进程ID,然后是您的信息并将其写入python端的剪贴板.....现在只需解析C++端的字符串。它类似于使用临时文件,但都在内存中完成.....但缺点是您不能将剪贴板用于任何其他应用程序。希望能帮助到你

于 2012-06-22T23:16:51.100 回答
0

使用传统的同步编程和标准 Python 库,您的要求很难完成。相反,如果您考虑使用异步编程模型和Twisted库,那简直是小菜一碟。Using Processes HOWTO描述了如何轻松地与任意数量的进程通信。诚然,Twisted 有一些学习曲线,但值得付出努力。

于 2012-07-09T15:11:45.133 回答