【问题标题】:How do I retrieve the text a user has typed into the terminal (but before the user has pressed enter)如何检索用户在终端中输入的文本(但在用户按下回车之前)
【发布时间】:2015-08-06 10:35:30
【问题描述】:

我正在编写一个将在 bash 终端后台运行的程序。我希望能够阅读用户在终端中输入(或粘贴)的文本。

例子:

<b>user@host:~/Documents/Code$</b> grep -rli whatever ./

假设用户在 bash 中输入了一些内容但还没有按下回车键(如上所示)。

有没有办法读取输入缓冲区来获取当前位于输入缓冲区中的文本?在这个例子中,我希望能够阅读"grep -rli whatever ./"。用户按下回车键并显示新的提示后,此方法应返回空字符串。

我曾考虑过抓取击键,但这不会检测所有形式的输入(例如,如果用户使用复制/过去、按 Tab 自动完成或使用箭头键调出上一个命令)。

我首选的接口是 python,但如果有人知道任何其他语言的解决方案,我会很高兴听到它。

【问题讨论】:

  • 我认为您需要实现自己的 shell(这在 Python 中并不难)来执行此操作,因为如果您的进程尚未运行,则无法读取命令行。
  • 您可以使用ncurses 库或类似库来执行此操作。确实存在用于 ncurses 的 Python 绑定,但您仍然必须弄清楚用户在 哪里输入
  • 实际上,我认为复制粘贴是在 Unix shell 中模拟的,通过向终端中运行的程序发送击键。 (真正的终端中不存在复制粘贴,如VT100串口。)
  • Here's 一个可能有帮助的答案。
  • 您也可以使用expect 脚本,但我对expect 的了解还不够,无法提供帮助。

标签: python bash


【解决方案1】:

我认为您不能在任意时间执行此操作,但 bash(和其他 shell)允许其完成功能具有可扩展性,因此您可以在按下选项卡进行自动完成时阅读命令行所说的内容:http://fahdshariff.blogspot.com/2011/04/writing-your-own-bash-completion.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 2017-01-26
    • 1970-01-01
    • 2011-09-25
    相关资源
    最近更新 更多