我有一个bash脚本,我从我的python脚本通过subprocess.call
调用;但是,单独运行时的bash脚本会询问用户输入。我想通过我的python脚本本身提供这个输入,而不是让用户手动回答它。
所以我基本上想要从python脚本调用bash脚本,然后通过代码本身提供输入到执行该bash脚本时生成的一个问题。
以下是我目前的情况:
subprocess.call("/bin/bash "+sample.sh ,shell=True)
执行此操作时,sample.sh
会询问用户提示:
你的名字是什么?
我想从python代码本身传递该名称。
我会感激任何指针。谢谢。
答案 0 :(得分:1)
您可以使用bash
和expect
解决该问题。以下是执行远程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