3

我希望使用 twisted 来控制主进程和一组从进程之间跨 Linux 管道(os.pipe())和 fifos(os.mkfifo())的通信。虽然我很肯定,可以将twisted 用于这些类型的文件描述符(毕竟,twisted 非常适合*nix 抽象为文件描述符的tcp 套接字),但我找不到这种用法的任何示例。有人有任何链接、示例代码或建议吗?

4

2 回答 2

12

您可以使用reactor.spawnProcess它在父进程和它产生的子进程之间设置任意文件描述符映射。例如,要运行一个程序并为其提供两个额外的输出描述符(除了 stdin、stdout 和 stderr),它可以将字节发送回父进程,您可以执行以下操作:

reactor.spawnProcess(protocol, executable, args,
                     childFDs={0: 'w', 1: 'r', 2: 'r', 3: 'r', 4: 'r'})

反应器将为您创建管道,并在从中读取数据时调用childDataReceivedProcessProtocol传入的数据。有关详细信息,请参阅spawnProcess API 文档

如果您还在子端使用 Twisted,那么您最想查看twisted.internet.stdio. 核心示例中的 stdiodemo.py 和 stdin.py将向您展示如何使用该模块。

于 2010-01-15T13:42:33.620 回答
-3

它没有任何内置的异步 I/O。有人给它写了一个libaio wrapper,但是好久没动了,不知道还能不能用。

在最坏的情况下,你可以用它select来查看是否有任何东西可供阅读,但这对你写作没有帮助。

于 2010-01-15T03:27:50.863 回答