从Python运行bash脚本时,自动响应Python运行的批处理脚本的输入提示
我有一个批处理文件,它是从Python运行bash脚本时,自动响应Python运行的批处理脚本的输入提示,python,python-3.x,bash,Python,Python 3.x,Bash,我有一个批处理文件,它是data.sh。因此,我使用python运行它 sh代码是这样的 configure() { read -p '--> Enter key ID: ' key_id read -p '--> Enter secret key: ' secret_key echo "$key_id" echo "$secret_key" } import subprocess rc = subpr
data.sh
。因此,我使用python运行它
sh代码是这样的
configure()
{
read -p '--> Enter key ID: ' key_id
read -p '--> Enter secret key: ' secret_key
echo "$key_id"
echo "$secret_key"
}
import subprocess
rc = subprocess.call("data.sh")
我是这样做的
configure()
{
read -p '--> Enter key ID: ' key_id
read -p '--> Enter secret key: ' secret_key
echo "$key_id"
echo "$secret_key"
}
import subprocess
rc = subprocess.call("data.sh")
我想使用python代码传递这两个密钥id和secret密钥。如何实现这一点?正如MattDMo在评论中所说,
configure
不使用任何命令行参数。如果将其更改为使用命令行参数($1
是第一个命令行参数,$2
是第二个等等),则可以将subprocess.call()
函数调用更改为使用参数列表。列表中传递的第一个参数将是可执行文件,其他参数将作为命令行参数传递给可执行文件。有关subprocess.call,请参见文档。有一个很好的例子,使用-l
的命令行arg调用ls
可执行文件。您不需要使用任何破折号(如ls示例中的-l
),只需将key id作为第一个参数传递,将secret key作为第二个参数传递即可。如下所示:
Python:
rc = subprocess.call(["data.sh", key_id, secret_key])
外壳:
configure()
{
key_id=$1
secret_key=$2
echo "$key_id"
echo "$secret_key"
}
如果不想更改脚本以获取命令行参数,可以这样做
subprocess.Popen(["./data.sh"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, universal_newlines=True).communicate('key123\nabcd')
configure()
未设置为从命令行读取值,因此您不能。你必须重写它。此外,shell脚本不是批处理文件。这是否回答了您的问题@马特莫,你不必重写它。OP可以直接写入子进程的stdin。我可以直接从python访问函数和并传递参数吗?不,这是一个不同的进程,因此您的通信将通过管道进行。