2010-05-04 66 views
5

我希望有人在控制檯中鍵入單詞,並在他們點擊「tab」鍵時從列表中自動完成。但是,raw_input不會返回一個字符串,直到有人點擊[Enter]。Python獲取raw_input,但手動決定何時完成字符串

直到用戶點擊[Enter],我如何將字符讀入變量?

*注意:由於操作系統問題,我不想使用import readline進行自動填充。

回答

5

沒有在這個問題上的官方FAQ條目,在Unix上:http://www.python.org/doc/faq/library/#how-do-i-get-a-single-keypress-at-a-time

編輯(從下面多納爾研究員評論複製)說:「問題是,終端是‘熟’的默認模式(允許簡單的行編輯),並且在輸入鍵時獲取鍵,它必須置於「原始」模式。「 (謝謝!)

+1

絕對是正確的答案。您可能想要編輯的問題是,終端默認處於「煮熟」模式(允許簡單的行編輯),並且在輸入鍵時獲取鍵,必須將其置於「原始」模式。而且在那個時候,提問者還必須擔心錯誤的輸入以及操作系統通常爲他們做的其他事情。 – 2010-05-04 10:42:07

1

sys.stdin * nix中使用select等待一個字符,然後.read()它。在Windows上使用msvcrt.kbhit()msvcrt.getch()

+0

請您詳細說明此解決方案嗎?我沒有實現它,不熟悉選擇模塊...:/ – EOL 2010-05-04 09:53:23

+0

@EOL:「不熟悉」是什麼意思?也許你應該(1)寫一些代碼,然後(2)對你使用該代碼的任何具體問題提出一個單獨的問題。 – 2010-05-04 20:48:42

+0

@ S.Lott:以下代碼不會捕獲第一個字符,但會等待,直到按下enter鍵:'import select,sys; char = select.select([sys.stdin],[],[])[0] [0] .read(1);打印「讀取%s」%char'。也許這是由於我不熟悉'select'模塊,並且不知道如何使用它。 :) – EOL 2010-05-05 09:10:15

相關問題