2010-01-15 59 views
3

我正在尋找使用twisted來控制主進程和一組從進程之間跨Linux管道(os.pipe())和fifos(os.mkfifo())的通信。雖然我是積極的,但可以使用twisted來處理這些類型的文件描述符(畢竟,twisted對於nix抽象爲文件描述符的tcp套接字非常適用),但我找不到任何這種類型的使用示例。任何人都有任何鏈接,示例代碼或建議?使用Python與文件描述符扭曲的示例

回答

-3

它沒有任何內置的異步I/O。有人爲它寫了一個libaio wrapper,但它很長一段時間沒有被觸及,我不知道它是否仍然有效。

在最糟糕的情況下,您可以使用select來查看是否有可供閱讀的內容,但這不會幫助您進行書寫。

12

您可以使用reactor.spawnProcess在父進程與其生成的子進程之間設置任意文件描述符映射。例如,要運行一個程序,並給它兩個額外的輸出描述符(除標準輸入,標準輸出,和標準錯誤),與它可以發送字節回父進程,你會做這樣的事情:

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

反應堆將負責爲您創建管道,並在您從中讀取數據時通過ProcessProtocol調用childDataReceived。詳情請參閱spawnProcess API docs

如果您也在兒童端使用Twisted,那麼您大多希望看到twisted.internet.stdiocore examples中的stdiodemo.py和stdin.py將向您展示如何使用該模塊。

+0

最後一句話提到'twisted.internet.stdio'正是我所期待的。很難找到,因爲http://twistedmatrix.com/documents/13.0.0/core/howto/process.html根本沒有提及它(如何做一個孩子..)。非常感謝! – oberstet 2013-10-12 23:39:03