Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.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运行的批处理脚本的输入提示_Python_Python 3.x_Bash - Fatal编程技术网

从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访问函数和并传递参数吗?不,这是一个不同的进程,因此您的通信将通过管道进行。