从 bash 向 python 脚本发送“输入键”

从 bash 向 python 脚本发送“输入键”

我正在尝试使用 bash 脚本自动化我的 ubuntu 设置,但遇到了以下问题:

我希望脚本enter在运行时自动发送击键umake ide eclipse(这会从终端安装 eclipse ide)。

这是在没有脚本的情况下从终端运行时的标准输出:

$ umake ide eclipse
Choose installation path: /home/gn4i/.local/share/umake/ide/eclipse
<need to press enter>
Downloading and installing requirements      

通常我会用 执行此操作echo | umake ide eclipse,但我总是收到以下错误

 $ echo | umake ide eclipse
Choose installation path: Choose installation path: ERROR: Unhandled exception
Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/umake/tools.py", line 158, in wrapper
    function(*args, **kwargs)
  File "/usr/lib/python3/dist-packages/umake/ui/__init__.py", line 42, in display
    cls.currentUI._display(contentType)
  File "/usr/lib/python3/dist-packages/umake/ui/cli/__init__.py", line 61, in _display
    contentType.run_callback(result=rlinput(contentType.content, contentType.default_input))
  File "/usr/lib/python3/dist-packages/umake/ui/cli/__init__.py", line 41, in rlinput
    return input(prompt + " ")
EOFError: EOF when reading a line

我怎样才能自动化这个安装?

答案1

我设法用屏幕方法解决了这个问题。这在后台运行,我看不到进度,但这对我来说没问题

screen -d -m -S umake-eclipse
screen -S umake-eclipse -p 0 -X stuff "umake ide eclipse\n\n"

答案2

使用一个非常简单的expect脚本:

spawn umake ide eclipse
expect "Choose installation path:" { sleep 1; send "\r" }

运行它:

$ expect -f script.expect

答案3

@Kusalananda 的答案在实践中不起作用,因为umake命令的执行在命令之后停止send

这是一个扩展的工作解决方案:

#!/usr/bin/expect

spawn umake ide eclipse
expect "Choose installation path:" { send "\r" }
interact

相关内容