Python:subprocess.call():为什么我需要shell参数是变量?

Python:subprocess.call():为什么我需要shell参数是变量?,python,shell,subprocess,Python,Shell,Subprocess,我读到os.system()将被subprocess.call()替换,所以我尝试使用它。 我正在用计算机读取环境变量 parallelrun = os.environ['PARALLEL_RUN'] aims = os.environ['AIMS_COMMAND'] 然后想用它来运行它吗 with open(outfile, 'w') as f: subprocess.call([parallelrun, aims], stdout=f) 我没有保存错误消息,但它似乎在子流程模块的

我读到os.system()将被subprocess.call()替换,所以我尝试使用它。 我正在用计算机读取环境变量

parallelrun = os.environ['PARALLEL_RUN']
aims = os.environ['AIMS_COMMAND']
然后想用它来运行它吗

with open(outfile, 'w') as f:
    subprocess.call([parallelrun, aims], stdout=f)
我没有保存错误消息,但它似乎在子流程模块的某个地方失败了。我认为使用
shell=True
运行它是可行的,但会使脚本更容易受到攻击。
我不明白为什么在同一个脚本中指定的变量在没有shell的情况下不能展开。有什么想法吗?

你能具体说明一下
parallelrun
aims
是什么吗?通常,列表中的第一个参数是命令,然后是参数。此外,由于您已经获得了环境变量,因此无需展开它们(使用
$
shell=True
)。还可以查看答案。
parallelrun
包含类似于
mpirun
aims
可执行文件路径的命令。为了安全问题,我想避免使用
shell=True
。然后我认为调用没有问题,而是执行
parallelrun
命令有问题。如果你把回溯贴出来会很有帮助的。不要有。问题是使用
os.system(parallelrun+''+aims'>'outfile)
工作得非常好。