使用Python Twisted与文件描述符的示例

3

我想使用twisted框架来控制在Linux管道(os.pipe())和有名管道(os.mkfifo())之间的通讯,以实现主进程和一组子进程之间的通信。虽然我确信可以使用twisted来处理这些类型的文件描述符(毕竟twisted非常适用于*nix抽象为文件描述符的tcp sockets),但我找不到任何此类用法的示例。是否有人可以提供相关链接、样例代码或建议?

2个回答

12
您可以使用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.stdiocore examples 中的stdiodemo.py和stdin.py将向您展示如何使用该模块。


上一个提到 twisted.internet.stdio 的句子正是我一直在寻找的。由于 http://twistedmatrix.com/documents/13.0.0/core/howto/process.html 没有提到它(如何做一个子进程),所以我花了很长时间才找到它。非常感谢! - oberstet

-3

它本身没有任何异步I/O的内置功能。有人为其编写了一个libaio wrapper,但已经很久没有更新了,我也不知道它是否仍然可用。

在最坏的情况下,您可以使用select来查看是否有可读的内容,但这对于写入是没有帮助的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接