Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 当Popen.communicate()不够时?_Python_Ipc_Subprocess_Popen - Fatal编程技术网

Python 当Popen.communicate()不够时?

Python 当Popen.communicate()不够时?,python,ipc,subprocess,popen,Python,Ipc,Subprocess,Popen,我发现了很多和这个话题或多或少相关的帖子,但仍然没有找到像完整答案这样的帖子。。。我在找你的建议 所以,我的问题是:我真的需要以两种方式与子流程通信:我必须将大量数据写入其输入,并动态获取其输出。这是没有办法的。我的子流程是著名的“lame”mp3编码器,输入是由我的函数生成的一小时或更长时间的PCM声音,输出是mp3文件,该文件也必须逐块发送给用户,而无需等待编码器完成 根据文档,Popen.communicate()无法帮助我处理几十兆或数百兆字节的IPC。同时,正如我从这里学到的,尝试从头

我发现了很多和这个话题或多或少相关的帖子,但仍然没有找到像完整答案这样的帖子。。。我在找你的建议

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

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

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

提前谢谢大家,,
伊利亚。

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


如果这对您不起作用,我发现使用命名管道进行开发比使用传统管道IPC容易得多。在测试过程中,很容易使用各种管道。应该使访问它们更容易。

如果我有你的想法,我必须启动三个子进程:一个用于创建输入数据并将其写入lame,一个用于执行lame本身,另一个用于获取输出并将其传输给用户。这里让我害怕的是,我必须实现整个监控逻辑:等待孩子,捕捉信号,在家长退出时杀死孩子,反之亦然,等等。至于Python 3中的NB-谢谢,我会阅读它。不幸的是,这个特定的任务必须在两个共享主机上运行,而Python2.4是一个悲惨的现实。但你是对的,实施起来仍然很烦人。关于这些问题的最佳讨论仍然是UNIX环境中的高级编程—请参阅—我强烈推荐这一点。