【发布时间】:2014-01-22 07:19:51
【问题描述】:
我编写了一个 bash 脚本,它可以自动在远程主机上安装一些软件,如下所示:
ssh user@remotehost "<path>/install-script"
install-script 是一个 bash 脚本。该 bash 脚本有时会调用另一个 bash 脚本,该脚本有时会调用交互式 python 脚本,然后使用 python 的 raw_input() 函数来收集用户输入。
当我正常运行安装脚本时(从 bash shell),它会提示输入并接受输入。但是,当我的脚本中的上述代码段运行时,在我输入输入之前我没有收到任何提示。
我真正可以控制的唯一脚本是我的自动化脚本。
我读过这个问题:“Python - how can I read stdin from shell, and send stdout to shell and file。”但是,我在普通的 bash shell 中运行没有问题,只能通过 ssh 上的远程命令。
能否在我的脚本中解决此问题(如果可以,如何解决?),还是我必须修改 python 脚本?
更新
为了澄清,我所指的输入提示是来自 python 脚本的提示。我没有输入 ssh 密码(远程主机的 authorized_keys 文件中有我的公钥)。
更新
为了进一步说明,我的脚本 (bash) 正在调用安装脚本 (bash),该脚本调用另一个 bash 脚本,该脚本最终调用 python 脚本,提示用户输入。
即bash -> bash -> bash -> python
【问题讨论】:
-
您需要使用 subprocess.Popen 或 ssh lib 来实现输入部分。
-
与我的问题中的代码类似:stackoverflow.com/questions/20472288/…
-
我知道,但是我的问题中的代码通过 SSH 处理脚本的输入/输出。请注意
elif 'are you sure you want to continue connecting' in lower:,这是我将输入返回给远程提示的示例。我已经在需要用户某种形式的操作/输入的远程安装脚本上使用它。 -
所以你是说我必须修改python脚本(提示的那个),而不是我的bash脚本?
-
我可能混在一起了,我假设调用脚本是 Python,而远程脚本是 bash->bash->python。但你是说你的调用脚本是 bash?
标签: python linux bash ssh raw-input