2013-11-04 69 views
3

在後臺啓動交互式Python控制檯時,我遇到了一個奇怪的問題。從後臺恢復解釋器後,它不顯示任何我輸入的文本(即它只顯示了>>>提示符,儘管它會解釋我所寫的任何內容。按[enter]在同一個文本上創建了另一個>>>提示符線)。在後臺運行的交互式Python解釋器

一個簡單的方法來重現問題只是鍵入:

python & 
fg 

,如果你在前臺啓動程序並不會發生此問題,把它的背景,並將其返回到前臺:

python 
[ctrl-z] 
bg 
fg 

如果你想知道爲什麼你可能要在後臺啓動交互式解釋,考慮以下情形:

我有作爲仿效需要很長時間才能運行,但在完成之後,我想與結果進行交互。於是,我開始計劃:

python -i simulation.py & 
fg #(after it's finished running) 

最簡單的辦法就是在前臺啓動它,將它移動到後臺,再後來把它帶到了前臺,但我只是想知道爲什麼會這樣。

+0

你安裝了'readline'模塊?我已經看到'readline'類似的行爲,而它是針對BSD'libedit'而不是GNU'libreadline'構建的。儘管不是幾年...哪個發行版,哪個Python版本,以及我們在哪個版本,哪個shell和終端程序和版本? – abarnert

+0

另外,'simulation.py'是否對'termios','tty','curses'或類似物執行任何操作,或者將二進制數據寫入終端? – abarnert

+0

我使用Ubuntu 13.04,Python 2.7和Bash。該腳本不會執行您列出的任何內容,但我不確定這是否相關,因爲即使沒有腳本(python&),您也可以重現該問題。 – sheridp

回答

2

考慮執行以下命令來強制終端ECHO模式你帶來了你的解釋到前臺後:

import termios 
attr = termios.tcgetattr(1) 
attr[3] = attr[3] | termios.ECHO 
termios.tcsetattr(1, termios.TCSANOW, attr) 
+0

任何想法爲什麼終端ECHO屬性被取消設置? – sheridp

+0

基本上和你的解決方案一樣:import os; os.system('reset')或os.system('stty sane')。仍然不確定爲什麼本地回聲被禁用。另外有趣的是,從解釋器外部執行reset或stty sane(使用bg中的python)並不能解決問題。 – sheridp