我已經開始創建一個相對較小的命令行RPG來彎曲我的新發現的Python肌肉,但我已經遇到了一個難題。我使用這個實現的getch(的):是否可以使用getch()獲取不同長度的輸入?
def getch():
fd = sys.stdin.fileno()
old_settings = termios.tcgetattr(fd)
tty.setraw(sys.stdin.fileno())
key = sys.stdin.read(3)
termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)
我key
集3個字符閱讀捕捉箭頭鍵。舉例來說,讀入爲ESC[A
;用這種方法,我可以使用key[2]
來確定是否按下了一個箭頭鍵和哪一個。一切都很好,除了我還想捕捉各種其他按鍵;用於任務日誌的q
,用於移動的wasd
(按各種順序按下箭頭將是攻擊的方法)等等。問題立即明確;如果getch()
僅返回單個字符,則箭頭功能完全丟失。
如果沒有簡單的解決方案,我正在考慮重新考慮箭頭系統,但我幾乎肯定必須有。無可否認,我對tty
內的知識知之甚少,但我在某處讀到,如果只讀取1個字符,則箭頭按下的多餘字符將保留在緩衝區中。我該如何去訪問所述緩衝區?或者,有沒有一些巧妙的方法可以告訴stdin
期望輸入可變長度?
非常感謝您的幫助。
這將需要用戶按兩次箭頭鍵,這不是很友好。 –
不,它不。你用'read(1)'替換'read(3)',接着用if語句來查找'\ x1b',然後'read(2)'來查看按下了什麼鍵。 – SingleNegationElimination
啊,是的。非常有意義。謝謝你,令牌。 –