我希望使用twisted来控制主进程和一组从进程之间的Linux管道(os.pipe())和fifos(os.mkfifo())之间的通信。虽然我很肯定,但是对于这些类型的文件描述符可以使用twisted(毕竟,对于* nix作为文件描述符抽象的tcp套接字,twisted是很好的),我找不到任何这种用法的例子。任何人都有链接,示例代码或建议吗?
答案 0 :(得分:12)
您可以使用reactor.spawnProcess
在父进程和它生成的子进程之间设置任意文件描述符映射。例如,要运行一个程序并为它提供两个额外的输出描述符(除了stdin,stdout和stderr),它们可以将字节发送回父进程,你可以这样做:
reactor.spawnProcess(protocol, executable, args,
childFDs={0: 'w', 1: 'r', 2: 'r', 3: 'r', 4: 'r'})
反应堆将负责为您创建管道,并在从中读取数据时调用childDataReceived
上的ProcessProtocol
。有关详细信息,请参阅spawnProcess API docs。
如果您还在孩子端使用Twisted,那么您通常希望查看twisted.internet.stdio
。 core examples中的stdiodemo.py和stdin.py将向您展示如何使用该模块。
答案 1 :(得分:-3)
它没有内置异步I / O的任何东西。有人为它写了一个libaio wrapper,但很长一段时间没有被触及,我不知道它是否仍然有用。
在最糟糕的情况下,您可以使用select
查看是否有任何可供阅读的内容,但这对您的写作无效。