2009-02-07 219 views
1

有什麼方法可以在Linux中向bash提示插入命令?我正在研究一個命令歷史記錄應用程序 - 就像Ctrl + R查找但不同。我爲此使用python。將命令插入Bash Shell

我會根據用戶的搜索詞顯示歷史命令列表 - 如果用戶按下回車鍵,應用程序將執行該命令並打印結果。到現在爲止還挺好。

如果用戶選擇一個命令,然後按下右鍵或左鍵,我想將命令插入提示符 - 以便用戶可以在執行命令之前編輯該命令。

如果你在Linux上,只需啓動一個bash控制檯,按Ctrl + r鍵入cd(或其他),然後按右箭頭鍵 - 所選命令將顯示在提示符處。這是我正在尋找的功能 - 但我想知道如何從Python內做到這一點。

回答

3

你可以做到這一點,但只有當shell作爲你的Python程序的子進程運行時;你無法將內容提供給父進程的標準輸入。 (如果可以的話,當人們使用比調用shell更少的特權運行進程時,UNIX會產生許多相關的安全問題!)

如果您熟悉Expect如何允許直通到交互子流程(使用特定的鍵序列從子進程觸發的用戶或字符串匹配並將控制權發送回您的程序),Python可以通過pexpect完成同樣的事情。或者,如另一篇文章中提到的,curses模塊可以完全控制終端顯示的繪製 - 如果歷史菜單在窗口內發生而不是在圖形(X11/win32)彈出窗口中,您將需要這些。

3

參見readline模塊。它實現了所有這些功能。

3

如果我理解正確,你會喜歡歷史行爲類似於在python應用程序 bash。如果這是你想要的GNU Readline Library是要走的路。

有一個python包裝GNU readline interface但它只在Unix上運行。 readline.py似乎是Windows的一個版本,但我從來沒有嘗試過。