Python

readline - 為什麼到達行尾時它只做輸入而不是換行?

  • December 2, 2014

我開發了一個使用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'

相關解決方案文章:https ://stackoverflow.com/questions/8806643/colorized-output-breaks-linewrapping-with-readline/8916332#8916332

引用自:https://unix.stackexchange.com/questions/170425