我想这样做:whatever.exe
其中v是表示要传递给sudo python3 setup.py install
的所有参数的字符串。有没有办法在不分别拆分每个参数的情况下做到这一点?
答案 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
中的内容,您可以更改为列表,如果您没有,那么,您可能会将您的程序暴露给可能的攻击或拒绝服务)