2011-02-28 25 views
6

我知道raw_input不能用於扭曲。但是,這是我想要的應用程序。如何使用raw_input與扭曲?

我有一塊提供交互式終端串口的硬件。我正嘗試連接到此端口並以異步方式發送命令。我需要這種方式,因爲這是一個馬達控制器,一旦我發出一個命令,它將「阻止」並逃跑(我當前的代碼)。如果遇到問題或危險,我需要能夠輸入另一個命令,例如ESTOP。

我讀過一些關於twisted.internet.stdio.StandardIO的東西,但是我沒有太多的運氣.. 任何建議/對此的幫助將是偉大的。

回答

7

這裏有幾個選項可以使用。一種方法是使用子進程來處理與串口和管道進行通信,以便父母和孩子之間進行通信(通過Twisted的進程協議進行簡化)。另一個是分離一個單獨的Python線程並從那裏使用raw_input。正常的線程間通信機制可以與Twisted正常工作。唯一真正的轉折來自於如何從單獨的線程中喚醒扭曲的反應堆。主要支持的機制是使用reactor.callFromThread()。在Twisted中使用線程需要仔細考慮,並且很容易搞砸(這就是爲什麼它通常不鼓勵),但偶爾它確實是工作的正確工具。

3

你見過StandardIO的例子嗎? Twisted core examples中有一對stdin.py和stdiodemo.py。有扭曲海螺的線編輯和歷史的a more advanced example。你可以用python -m twisted.conch.stdio來運行這個,看看它在運行。海螺例子可能只適用於POSIX平臺,而不適用於Windows。

+0

stdin.py和stdiodemo.py示例非常簡單。例如,他們不顯示如何執行行編輯,歷史記錄,製表符完成或readline界面中使用的其他功能。 高級示例僅顯示ConsoleManhole。如果我想輸入不是python代碼的自定義命令,該怎麼辦?代碼中的TerminalProcessProtocol是做什麼的?它似乎沒有被引用到任何地方。 – blubberdiblub 2013-11-21 19:03:46

+0

的確如此。也許你想問你自己的問題... – 2013-11-22 16:45:52

+0

是的,我可能最終。但首先我會嘗試與自己扭曲和自我介入(這就是爲什麼我在尋找合適的教程),如果沒有結果,我可能會形成一個關於我卡在哪裏的問題。 – blubberdiblub 2013-11-24 16:54:07