我想通过带有命令行选项的子进程运行linux命令。问题是,当某些选项包含空字符串时,命令将失败。
!#/usr/bin/env python3
import subprocess
args = {'user': 'name', 'pw': ''}
subprocess.call([
'foocommand',
'user', args['user'],
'pw', args['pw']
])
此命令将失败,因为args['pw']
包含空字符串。仅当子进程存在时,我才能将命令行选项应用到子进程吗?
发布于 2018-06-30 03:45:52
从字典中动态构建参数列表。
cmd = ['foocommand']
for name, val in args.items():
if val:
cmd += [name, val]
发布于 2018-06-30 03:45:30
事先验证pw
键或字典中的任何键中是否有值,然后使用适当的选项调用命令。你可以用很多方法来实现,例如:
if len(args['pw']) > 0:
# do stuff
我把它留给作者来决定如何做得最好。
发布于 2018-06-30 03:48:36
这应该是可行的。
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])))
https://stackoverflow.com/questions/51108400
复制相似问题