Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何回答从python脚本调用的bash脚本提出的问题,而无需人工干预_Python_Linux_Bash_Shell - Fatal编程技术网

如何回答从python脚本调用的bash脚本提出的问题,而无需人工干预

如何回答从python脚本调用的bash脚本提出的问题,而无需人工干预,python,linux,bash,shell,Python,Linux,Bash,Shell,我有一个bash脚本,可以通过子流程调用从python脚本调用;但是,单独运行时,bash脚本会请求用户输入。我希望通过python脚本本身提供此输入,而不是让用户手动回答 所以我基本上想从python脚本中调用一个bash脚本,然后通过代码本身向在执行该bash脚本时生成的一个问题提供输入 以下是我目前的情况: subprocess.call("/bin/bash "+sample.sh ,shell=True) 执行此操作时,sample.sh要求用户提示: 你叫什么名字 我想从pytho

我有一个bash脚本,可以通过
子流程调用从python脚本调用;但是,单独运行时,bash脚本会请求用户输入。我希望通过python脚本本身提供此输入,而不是让用户手动回答

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

以下是我目前的情况:

subprocess.call("/bin/bash "+sample.sh ,shell=True)
执行此操作时,
sample.sh
要求用户提示:

你叫什么名字

我想从python代码本身传递这个名称


如果有任何建议,我将不胜感激。谢谢。

您可以使用
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;'
导出IP=
出口PAS=
expect-c'spawn ssh root@$env(IP)“ls-l/”;预期“密码:”;发送“$env(PAS)\n”;互动

当expect收到字符串“password:”时,它发送变量PASS(密码)的内容,因此您可以进行ssh连接并执行远程命令,而无需显式写入密码。

您可以使用
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;'
导出IP=
出口PAS=
expect-c'spawn ssh root@$env(IP)“ls-l/”;预期“密码:”;发送“$env(PAS)\n”;互动
当expect接收到字符串“password:”时,它发送变量PASS(密码)的内容,因此您可以进行ssh连接并执行远程命令,而无需显式写入密码。

似乎正是您需要的。例如:

child = pexpect.spawn('scp foo myname@host.example.com:.')
child.expect ('Password:')
child.sendline (mypassword)
这是我的建议。您可以通过以下方式安装
pexpect

pip install pexpect
似乎正是你所需要的。例如:

child = pexpect.spawn('scp foo myname@host.example.com:.')
child.expect ('Password:')
child.sendline (mypassword)
这是我的建议。您可以通过以下方式安装
pexpect

pip install pexpect

这不是您希望得到的答案,但是为什么不将bash脚本转换为python函数呢?因此,您可以轻松地处理参数。。。我想补充的是,该子流程支持参数->,但(imo)在运行时不支持灵活的输入。使用命令行参数传递名称,而不是提示在bash脚本中输入名称。这不是您希望得到的答案,但为什么不将bash脚本转换为python函数呢?因此,您可以轻松地处理参数。。。我想补充的是,该子流程支持参数->,但(imo)在运行时不支持灵活的输入。请使用命令行参数传递名称,而不是提示在bash脚本中输入名称