2015-11-04 282 views
1

即時通訊使用Python 3.5,我的代碼如下:Process.stdout.readline()不正確輸出

鑑於a_sentence程序while循環過程中掛起,因爲line_read是「」,所以它永遠不會增加nl_c,因此永遠不會退出循環,我對使用子流程相對來說比較陌生,所以我不確定問題出在哪裏,是不是正確讀取或輸出。 tl; dr當它應該是一個任意字符串時,子進程的輸出是「」。

有人可以指示我在正確的方向上獲得line_read = proc.stdout.readline()是上面輸入的行嗎?

+0

反正什麼是「a_sentence」?你不顯示它的初始化。不知道你給我們一個你的問題的MCVE。 – RobertB

+0

a_sentence只是一個任意的句子字符串。我編輯了代碼來舉例。 – SharpObject

+0

你在哪裏打電話給'溝通()'? – RobertB

回答

0

readline返回一行文本,包括尾隨的新行,直到流在另一端關閉。一旦所有數據都被讀取,它就會開始返回空字符串,讓調用者知道流被關閉,並且永遠不會有新數據。一般來說,while循環應該在返回空字符串時中斷。

您還應該在末尾調用proc.wait(),以便清理有關死點進程的系統信息。

+0

然後當打印'line_read = proc.stdout.readline()'不應該返回字符串輸入上面幾行?我的問題是,理論上應該將字符串寫入子進程,但是當我調用'line_read = proc.stdout.readline()'時不會輸出字符串,因爲我嘗試打印line_read,並且首先得到的是「」,而不是我最初輸入的字符串。 – SharpObject

+0

這只是意味着被調用的進程沒有像你期望的那樣工作。您可以查看stderr和返回代碼以獲取更多詳細信息。但是,當readline返回「」時,意味着子進程關閉了輸出管道,不會給你更多的數據。 – tdelaney

+0

好吧,我認爲它是一個子進程的問題。調用stderr返回'無',所以我不知道如何解決這個問題,但感謝您的幫助! – SharpObject