【发布时间】:2012-03-14 03:32:12
【问题描述】:
我正在运行一些需要手动键盘输入来更改参数的模拟(很烦人)。
有没有办法模拟键盘按下,以便我可以使用 bash 脚本运行模拟?
【问题讨论】:
-
我认为按键是用于交互式命令,不能作为简单的选项传递给命令?
标签: macos bash keyboard terminal applescript
我正在运行一些需要手动键盘输入来更改参数的模拟(很烦人)。
有没有办法模拟键盘按下,以便我可以使用 bash 脚本运行模拟?
【问题讨论】:
标签: macos bash keyboard terminal applescript
虽然我不推荐它,但你可以这样做(它只是列出你的主目录的内容)
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 运行。
osascript,但问题仍然是它只是盲目地按键。如果您已经从 CLI 运行所有内容,那么求助于 GUI 脚本可能不是一个好主意(而且很少需要)
do script 告诉终端将文本发送到终端。您可以将do script 命令发送到特定窗口中的特定选项卡。 do script 命令的结果是对用于后续do script 命令的终端的引用。例如:set theTerminal to do script "cd ~" 然后do script "ls -la" in theTerminal
也许你可以使用expect?
还有echo | <cmd>。
【讨论】:
事实证明我可以一直使用 bash:
./program << ENDINPUT
$input1
$input2
$input3
ENDINPUT
【讨论】:
我是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()
【讨论】: