python subprocess.call() 不适用于多行 shell 命令



我想运行这个多行shell命令:

echo 'a=?'
read a
echo "a=$a"

从python脚本,使用subprocess.call()方法。

我写了这个,在test.py文件:

import shlex, subprocess
args = ["echo", 'a=?',"read", "a", "echo", "a=$a"]
subprocess.call(args)

,当我执行它时,我在终端有这个报告:

Armonicus@MyMacs-iMac MyNewFolder % python test.py
a=? read a echo a=$a

这至少与我所期望的不太接近。有人能帮帮我吗,拜托?

你的方法有几个问题。

首先,如果您想做的是提示用户从命令行输入,那么您可以使用Python内置程序而不是子进程:

a = input('a=?')
print(a)

如果您确实希望调用具有多个命令的子进程,则需要对每个命令进行单独的调用,或者调用shell并在其中执行命令。例如:

subprocess.call("echo 'a=?'; read a; echo $a", shell=True)

最新更新