【问题标题】:Simulate keyboard presses in mac terminal在 mac 终端中模拟键盘按下
【发布时间】:2012-03-14 03:32:12
【问题描述】:

我正在运行一些需要手动键盘输入来更改参数的模拟(很烦人)。

有没有办法模拟键盘按下,以便我可以使用 bash 脚本运行模拟?

【问题讨论】:

标签: macos bash keyboard terminal applescript


【解决方案1】:

虽然我不推荐它,但你可以这样做(它只是列出你的主目录的内容)

tell application "Terminal"
    activate
    do script "cd ~" -- the command to run
    delay 5 -- maybe throw in a delay to let the process start up
    tell application "System Events" to keystroke "ls -la" & return -- the keystrokes to simulate
end tell

然而这相当于训练一只猫在你的键盘上行走。该代码不知道终端中发生了什么。它只是“输入”一些东西并按下返回,完全不经意间。

因此,如果您有任何其他方式将输入传递给进程,请改用它。我刚刚发布了这个,因为您确实要求 AppleScript 解决方案。我只是怀疑 AppleScript 的 正确 解决方案。

【讨论】:

  • 可以将这样的脚本提供给osascript,它可以从 CLI 运行。
  • @synthesizerpatel 当然,您可以将它通过管道发送到osascript,但问题仍然是它只是盲目地按键。如果您已经从 CLI 运行所有内容,那么求助于 GUI 脚本可能不是一个好主意(而且很少需要)
  • 您不需要使用系统事件来模拟键盘输入。只需使用do script 告诉终端将文本发送到终端。您可以将do script 命令发送到特定窗口中的特定选项卡。 do script 命令的结果是对用于后续do script 命令的终端的引用。例如:set theTerminal to do script "cd ~" 然后do script "ls -la" in theTerminal
【解决方案2】:

也许你可以使用expect

还有echo | <cmd>

【讨论】:

    【解决方案3】:

    事实证明我可以一直使用 bash:

    ./program << ENDINPUT
    $input1
    $input2
    $input3
    ENDINPUT
    

    【讨论】:

      【解决方案4】:

      我是cli-driver 的作者,这是一个用于自动化命令行的 Node.js 库,类似于 web-driver 但在命令行中。它支持 mac、linux 和 windows,到目前为止,我能够轻松地“自动化”任何我需要的用例,从复杂的提示到多个命令任务、ssh 会话、使用选项卡的命令完成或使用 control+r 的历史记录,甚至使用六、纳米、emacs。

      它可以让您实际创建一个新终端并模拟用户输入(仅限键盘)。一般来说,您需要模拟人类用户击键,如字符,但在特定序列中,如“enter”、“shift-tab”、“control-q”、“control-shift-right”等。但更一般地说,任何 ansi 序列都可以编写用于控制光标、键盘和显示功能 - 尽管一般情况下您不需要。

      在内部它使用 node-pty,它是“用于 node.js 的 forkpty(3) 绑定。这允许您使用伪终端文件描述符来分叉进程。它返回一个允许读取和写入的终端对象。”

      comunicacion 只是一种方式 - 你输入文本并等待输出,例如(主页上有很多):

      const client = await new Driver().start()
      let output = await client.enterAndWait('ls -a', '..')
      expect(output).not.toContain('tmpFile')
      await client.enterAndWait('echo hello > tmpFile1.txt', d=>existsSync('tmpFile1.txt'))
      await client.destroy()
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-07-12
        • 1970-01-01
        • 2021-12-14
        • 1970-01-01
        • 2019-02-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多