Python 读取wine应用程序生成的Linux进程的stdout

Python 读取wine应用程序生成的Linux进程的stdout,python,linux,ipc,wine,Python,Linux,Ipc,Wine,我有一个CLI应用程序,它是通过Linux上的Wine执行的,因为它需要一些仅适用于Windows的封闭源代码DLL。不过,我还有另一个工具,它更容易在Linux上编译/运行。Linux应用程序通过STDIN/STDOUT进行通信 所以我想从Wine中生成一个本地Linux进程,传递一些数据(最好是通过stdin),等待进程完成并读取其结果(最好是通过stdout)。如果两个进程都在同一个操作系统环境(纯Linux/Posix/Windows)中运行,那么这很简单,但在我的例子中更复杂 我可以使

我有一个CLI应用程序,它是通过Linux上的Wine执行的,因为它需要一些仅适用于Windows的封闭源代码DLL。不过,我还有另一个工具,它更容易在Linux上编译/运行。Linux应用程序通过STDIN/STDOUT进行通信

所以我想从Wine中生成一个本地Linux进程,传递一些数据(最好是通过stdin),等待进程完成并读取其结果(最好是通过stdout)。如果两个进程都在同一个操作系统环境(纯Linux/Posix/Windows)中运行,那么这很简单,但在我的例子中更复杂

我可以使用popen生成一个Linux进程,但是我无法获得它的stdout(总是得到一个空字符串)

我知道Wine本身不会/不能提供阻塞进程创建(可能这在尝试维护Windows语义时会产生很多边缘情况),如stackoverflow answer“”中所述

然而,Wine进程仍然在Linux下运行,因此我认为应该能够以某种方式利用Linux(=内核)的功能并执行阻塞读取

  • 有没有人对如何启动Linux进程并从Wine获得其标准输出有一些建议
  • 关于如何在不安装复杂服务器的情况下进行IPC,还有其他想法吗
理论上,我可以使用文件系统,等待结果文件出现,或者运行TCP/HTTP服务器进行通信。理想情况下,只有启动的应用程序才可以访问输入,而没有相同主机上的每个应用程序都可以访问的服务器端口

我读过关于“winelib”作为从“Windows”程序访问本机Unix功能的一种方式的文章,但我不确定我是否完全掌握了如何使用它以及它是否对我有帮助(我可以调整Wine程序,但正如我前面提到的,我需要访问一些我无法修改的封闭源代码DLL)

编辑:我刚刚注意到一个库,它允许通过(Unix)Python与Windows DLL通信(通过Python的多进程定制wine+TCP连接)。我不能按原样使用它(我的DLL库使用了很多指针,所以我通过pybind11对它进行了包装),这意味着我必须对我的应用程序进行一些返工。然而,它可能会产生一个优雅的解决方案,其中Windows位更加孤立,我可以享受更多的Linux乐趣。:-)