python - 当 Popen.communicate() 不够时?

标签 python ipc subprocess popen

我发现很多线程或多或少与这个主题相关,但仍然几乎没有完整答案......我正在寻找你的建议。

所以,这是我的问题:我确实需要以两种方式与子进程通信:我必须将大量数据写入其输入并即时获得其输出。没有其他办法了。我的子进程是著名的“lame”mp3 编码器,输入是由我的函数生成的一个小时或更长时间的 PCM 声音,输出是 mp3 文件,该文件也必须逐 block 发送给用户,而无需等待编码器完成。

根据文档,Popen.communicate() 不会帮助我处理以数十或数百兆字节为单位的 IPC。同时,正如我从这里了解到的那样,尝试从头开始创建这种方法是非常危险的,因为有很多陷阱在等待:死锁、缓冲、进程管理等。

所以,我的问题是:对于这类问题是否有一些众所周知的解决方案:真正解决问题的 python 库或代码示例?可能至少有一篇文章或其他东西清楚地描述了一个人在尝试自己解决这个问题时可能遇到的大多数问题?

先谢谢你, 伊利亚。

最佳答案

最简单的方法是将您自己的程序一分为二:一个写入 LAME,另一个从 lame 读取并写入用户。这比双向通信容易得多。

如果这对您不起作用,我发现使用命名管道进行开发比使用传统管道 IPC 更容易。在测试期间很容易使用各种管道。 Nonblocking I/O in Python 3应该可以更轻松地访问它们。

关于python - 当 Popen.communicate() 不够时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4115051/

相关文章:

python - 输入到 C++ 可执行 python 子进程

python - 我应该把我的 python 脚本放在 Linux 中的什么地方?

python - Pandas 数据帧 : Replace values in a dataframe with values from corresponding column vector of a different dataframe

Python subprocess.check_output 输出与同一命令的 bash 输出不同

java - Node.js 和 Java 之间的 IPC 通信

c++ - 我们可以用 boost.asio 创建未命名的套接字来模拟匿名管道吗?

python - 如何获取 PyWin32 进程的 PID

python - tkinter 变量跟踪方法

python xml xpath查询使用带有ns的标签和属性

java - 如何快速学习Java RMI