Python:subprocess.call():为什么我需要shell参数是变量?
我读到os.system()将被subprocess.call()替换,所以我尝试使用它。 我正在用计算机读取环境变量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) 我没有保存错误消息,但它似乎在子流程模块的
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)
工作得非常好。