如何在subprocess.check_call()中传递多个参数?

时间:2018-10-16 18:19:33

标签: python bash arguments

在运行Shell脚本时,如何在python的子过程调用中传递多个参数?

import subprocess

subprocess.check_call('./test_bash.sh '+arg1 +arg2, shell=True)

这会打印出作为一个参数串联的arg1和arg2。我需要将3个参数传递给我的shell脚本。

1 个答案:

答案 0 :(得分:2)

它当然是串联的,因为您没有在它们之间插入空格。 Quickfix是(使用format,如果某些参数包含空格,则可能会失败)

 subprocess.check_call('./test_bash.sh {} {}'.format(arg1,arg2), shell=True)

您可以尝试(功能更强大,无需引用空格,自动生成命令行):

check_call(['./test_bash.sh',arg1,arg2],shell=True)`

(由于shell=True和参数列表一起使用,因此不确定它是否在所有系统上都有效)

或删除shell=True并显式调用该外壳程序(可能会失败,因为与shell=True不同,没有考虑 shebang ,但值得放弃shell=True,可能会注入代码等问题):

check_call(['sh','-c','./test_bash.sh',arg1,arg2])