Python
readline - 為什麼到達行尾時它只做輸入而不是換行?
我開發了一個使用cmd模組創建互動式命令行界面的 python 應用程序。此cmd模組使用readline進行命令行管理:完成、歷史…
我的問題是:在我嘗試使用該應用程序的電腦上,當我輸入太長的行時,它會回到行首並且沒有換行。所以我正在寫線本身。這使得瀏覽和編輯歷史命令變得非常痛苦。雖然它在我的開發盒上執行良好。
我嘗試更改啟動 python 的 shell(從 bash 到 sh),沒有區別,我嘗試更改我使用的終端(從 Terminator 到 XTerm 或 UXTerm),沒有區別。
您對它的來源以及如何解決此問題有何猜測?
編輯: 這是一個截圖。我已經找到了錯誤的原因,我猜它來自與終端行長度相比沒有得到很好處理的顏色字元。
在螢幕截圖的第一部分(綠線上方),我使用了彩色提示(你可以看到粉紅色的 /),當到達行尾時,我開始在提示上書寫。如果我繼續寫,我可以寫一個完整的行,完全覆蓋原來的第一行,然後它開始提供新的行。
在第二部分(綠線下方),我一直寫到行尾,並且換行符出現在正確的時刻。
這種行為背後的解釋是什麼?(正如我所說,並非每種配置都會發生這種情況。)我該如何解決?
它來自我對顏色的使用。我正在使用以下字元串為我的文本著色:
class colors: HEADER = '\033[95m' OKBLUE = '\033[94m' OKGREEN = '\033[92m' WARNING = '\033[93m' FAIL = '\033[91m' ENDC = '\033[0m'
我添加了
\001
和\002
字元,現在,它可以工作了!class colors: HEADER = '\001\033[95m\002' OKBLUE = '\001\033[94m\002' OKGREEN = '\001\033[92m\002' WARNING = '\001\033[93m\002' FAIL = '\001\033[91m\002' ENDC = '\001\033[0m\002'