我想使用twisted框架来控制在Linux管道(os.pipe())和有名管道(os.mkfifo())之间的通讯,以实现主进程和一组子进程之间的通信。虽然我确信可以使用twisted来处理这些类型的文件描述符(毕竟twisted非常适用于*nix抽象为文件描述符的tcp sockets),但我找不到任何此类用法的示例。是否有人可以提供相关链接、样例代码或建议?
我想使用twisted框架来控制在Linux管道(os.pipe())和有名管道(os.mkfifo())之间的通讯,以实现主进程和一组子进程之间的通信。虽然我确信可以使用twisted来处理这些类型的文件描述符(毕竟twisted非常适用于*nix抽象为文件描述符的tcp sockets),但我找不到任何此类用法的示例。是否有人可以提供相关链接、样例代码或建议?
reactor.spawnProcess
在父进程和它衍生的子进程之间设置任意文件描述符映射。例如,要运行一个程序并提供两个额外的输出描述符(除了stdin、stdout和stderr),使其能够向父进程发送字节,您可以像这样操作:reactor.spawnProcess(protocol, executable, args,
childFDs={0: 'w', 1: 'r', 2: 'r', 3: 'r', 4: 'r'})
反应堆会为您创建管道,并在从它们读取数据时调用您传递给它的ProcessProtocol
上的childDataReceived
。有关详细信息,请参阅spawnProcess API文档。
如果您还在子进程中使用Twisted,则主要要查看twisted.internet.stdio
。core examples 中的stdiodemo.py和stdin.py将向您展示如何使用该模块。
它本身没有任何异步I/O的内置功能。有人为其编写了一个libaio wrapper,但已经很久没有更新了,我也不知道它是否仍然可用。
在最坏的情况下,您可以使用select
来查看是否有可读的内容,但这对于写入是没有帮助的。
twisted.internet.stdio
的句子正是我一直在寻找的。由于 http://twistedmatrix.com/documents/13.0.0/core/howto/process.html 没有提到它(如何做一个子进程),所以我花了很长时间才找到它。非常感谢! - oberstet