在python中使用子进程调用整个参数字符串

时间:2017-06-20 20:20:22

标签: python subprocess

我想这样做:whatever.exe其中v是表示要传递给sudo python3 setup.py install的所有参数的字符串。有没有办法在不分别拆分每个参数的情况下做到这一点?

1 个答案:

答案 0 :(得分:2)

是的,您可以将完整的命令行作为字符串传递:

subprocess.call('whatever.exe {}'.format(v))

但这不是一个好主意,因为如果v中包含的某些参数中有空格,则必须手动进行引用(并且正如Charles提醒我的第50次它仅适用于Windows除非设置shell=True,这是另一个坏主意)

另一种选择是使用shlex.split并附加到您现有的参数列表中(如果可执行文件在路径中至少有空格处理):

subprocess.call(['whatever.exe']+shlex.split(v))

但最好的选择当然是正确地组成参数列表(作为实际的list),而不是将字符串传递给subprocess(安全性,安全性和可移植性的原因)用)。如果您正在控制v中的内容,您可以更改为列表,如果您没有,那么,您可能会将您的程序暴露给可能的攻击或拒绝服务)