我正在运行一些模拟,需要手动键盘输入以更改参数(非常烦人)。
有没有一种方法可以模拟按键,这样我就可以用bash脚本运行模拟了?
我正在运行一些模拟,需要手动键盘输入以更改参数(非常烦人)。
有没有一种方法可以模拟按键,这样我就可以用bash脚本运行模拟了?
虽然我不建议这样做,但你可以像这样做(它只列出了您的主目录中的内容)
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
,并且可以从命令行界面运行。 - synthesizerpatelosascript
将其导入,但问题仍然是它只是盲目地按键。如果你已经从命令行界面运行所有内容,那么诉诸GUI脚本很可能不是一个好主意(而且很少有必要)。 - Flambinodo script
命令告诉终端发送文本到终端。你可以向特定窗口的特定标签发送do script
命令。do script
命令的结果是一个终端的引用,可用于后续的do script
命令。例如:set theTerminal to do script "cd ~"
,然后在theTerminal中执行do script "ls -la"
。 - Chris Page./program << ENDINPUT
$input1
$input2
$input3
ENDINPUT
我是cli-driver的作者,它是一个用于自动化命令行的Node.js库,类似于web-driver但是在命令行中使用。它支持Mac、Linux和Windows,并且到目前为止,我能够轻松地“自动化”任何我需要的用例,从复杂的提示符到多个命令任务,SSH会话,带有Tab键的命令补全或使用vi、nano、emacs等编辑器。
它实际上可以创建一个新的终端并模拟用户输入(仅限键盘)。通常情况下,您需要模拟人类用户的按键操作,例如字符,但特别是一些序列,如“回车”,“Shift-Tab”,“Control-Q”,“Control-Shift-Right”等。但更一般地,任何ANSI序列都可以用来控制光标、键盘和显示功能 - 尽管通常情况下您不需要这样做。
内部它使用了node-pty,它是“forkpty(3) bindings for node.js”。这允许您使用伪终端文件描述符派生进程。它返回一个终端对象,允许读取和写入操作。
然而,通信只是单向的 - 您输入文本并等待输出,例如(主页上有很多示例):
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()