如何回答从没有人为干预的python脚本调用的bash脚本提出的问题

时间:2017-02-09 12:23:10

标签: python linux bash shell

我有一个bash脚本,我从我的python脚本通过subprocess.call调用;但是,单独运行时的bash脚本会询问用户输入。我想通过我的python脚本本身提供这个输入,而不是让用户手动回答它。

所以我基本上想要从python脚本调用bash脚本,然后通过代码本身提供输入到执行该bash脚本时生成的一个问题。

以下是我目前的情况:

subprocess.call("/bin/bash "+sample.sh ,shell=True)

执行此操作时,sample.sh会询问用户提示:

  你的名字是什么?

我想从python代码本身传递该名称。

我会感激任何指针。谢谢。

2 个答案:

答案 0 :(得分:1)

您可以使用bashexpect解决该问题。以下是执行远程ssh连接并执行ls -l /的示例:

export IP=<ip>
export PAS=<passwd>
expect -c 'spawn ssh root@$env(IP) "ls -l  /"; expect "password:"; send "$env(PAS)\n"; interact;'

当期望收到字符串&#34;密码:&#34;它发送变量PASS(密码)的内容,因此您可以执行ssh连接并执行远程命令而无需明确写入密码。

答案 1 :(得分:1)

pexpect似乎完全符合您的需要。举个例子:

child = pexpect.spawn('scp foo myname@host.example.com:.')
child.expect ('Password:')
child.sendline (mypassword)

这是github repo。您可以使用

安装pexpect
pip install pexpect