我有一個pty的主結束的文件描述符。這個pty被庫(libvte)用來產生並運行子進程。如何讀取到達PTY主端的數據副本?
我可以輪詢和讀取文件描述符或其副本,但數據永遠不會到達庫。
我可以輪詢並從文件描述符中讀取,然後將其寫回主服務器,但隨後我進入一個令人討厭的循環,讀取自己的數據,並且沒有任何內容通過底層庫。
有什麼解決方案讓我讀取數據的副本,而不會干擾pty的底層功能嗎?
我正在使用Python,但我不認爲它真的在這個級別上很重要。
我有一個pty的主結束的文件描述符。這個pty被庫(libvte)用來產生並運行子進程。如何讀取到達PTY主端的數據副本?
我可以輪詢和讀取文件描述符或其副本,但數據永遠不會到達庫。
我可以輪詢並從文件描述符中讀取,然後將其寫回主服務器,但隨後我進入一個令人討厭的循環,讀取自己的數據,並且沒有任何內容通過底層庫。
有什麼解決方案讓我讀取數據的副本,而不會干擾pty的底層功能嗎?
我正在使用Python,但我不認爲它真的在這個級別上很重要。
看看我pypty程序 - 這是在/ usr/bin中/腳本與一些額外的功能,一個Python重新實現,所以它在Python演示PTY通信的兩端:
BTW,謹防與信號(相對而言)裸體系統調用 - 它們可能會在部分完成時返回。尤其請參閱maybe_restarted_syscall函數。只需調整窗口大小就會在使用PTY時導致信號傳遞。
感謝這很酷,但我不知道它回答我的問題,我只有一個FD讀取和寫入,從標準輸入讀取,並寫入標準輸出(同時也寫入另一個文件)。既然你比我更專業,我希望我錯了,但請解釋一下。 – 2011-12-27 00:22:12
你有一些代碼可以分享嗎? – jcollado 2011-12-26 23:07:36
import vte; t = vte.Terminal(); fd = t.get_pty(); #現在讀取從fd – 2011-12-27 00:23:41