将命令插入Bash Shell

时间:2009-02-07 16:30:31

标签: python linux bash shell command

有没有办法在Linux中的bash提示符中注入命令?我正在开发一个命令历史记录应用程序 - 比如Ctrl + R查找但不同。我正在使用python。

我将根据用户的搜索词显示历史记录中的命令列表 - 如果用户按下回车键,应用程序将执行命令并打印结果。到目前为止,非常好。

如果用户选择一个命令,然后按右或左键,我想将命令插入提示中 - 这样用户可以在执行命令之前编辑命令。

如果您使用的是Linux,只需启动bash控制台,按Ctrl + r,键入cd(或其他内容),然后按右箭头键 - 将在提示符下显示所选命令。这是我正在寻找的功能 - 但我想知道如何在python中做到这一点。

4 个答案:

答案 0 :(得分:3)

您可以这样做,但前提是shell作为Python程序的子进程运行;您无法将内容提供给父进程的标准输入。 (如果可以的话,当人们使用比调用shell更少的权限运行进程时,UNIX会遇到许多相关的安全问题!)

如果您熟悉Expect如何允许直通到交互式子进程(使用来自用户的特定键序列或从子进程接收的字符串触发匹配并将控制权发送回程序),那么同样的事情可以用pexpect从Python完成。或者,正如另一篇文章提到的那样,curses模块可以完全控制终端显示的绘制 - 如果这个历史菜单在窗口内发生而不是在图形(X11 / win32)弹出窗口中,您将需要它-up。

答案 1 :(得分:3)

请参阅readline模块。它实现了所有这些功能。

答案 2 :(得分:3)

如果我理解正确,你会希望历史行为类似于bash的历史行为 一个python应用程序。如果这是您想要的,那么GNU Readline Library就是您的选择。

有一个python包装器GNU readline interface但它只在Unix上运行。 readline.py似乎是适用于Windows的版本,但我从未尝试过。

答案 3 :(得分:1)

ncurses及其python port是一种方法,恕我直言。