我想通过带有命令行选项的子进程运行linux命令。问题是,当某些选项包含空字符串时,该命令将失败。
!#/usr/bin/env python3
import subprocess
args = {'user': 'name', 'pw': ''}
subprocess.call([
'foocommand',
'user', args['user'],
'pw', args['pw']
])
该命令将失败,因为args['pw']
包含一个空字符串。只能在子进程存在时将命令行选项应用于子进程吗?
答案 0 :(得分:4)
从字典中动态构建参数列表。
cmd = ['foocommand']
for name, val in args.items():
if val:
cmd += [name, val]
答案 1 :(得分:0)
请事先验证pw
键或字典中任何键的内部是否存在此值,然后使用适当的选项调用该命令。您可以通过多种方式做到这一点,例如:
if len(args['pw']) > 0:
# do stuff
我让作者决定如何做到最好。
答案 2 :(得分:0)
这应该有效。
import subprocess
from itertools import chain
args = {'user': 'name', 'pw': ''}
subprocess.call(['foocommand'] + list(chain([(arg, value) for arg, value in args.items() if value])))