仅在python

时间:2018-06-29 19:40:23

标签: python python-3.x subprocess

我想通过带有命令行选项的子进程运行linux命令。问题是,当某些选项包含空字符串时,该命令将失败。

!#/usr/bin/env python3

import subprocess

args = {'user': 'name', 'pw': ''}

subprocess.call([
    'foocommand',
    'user', args['user'],
    'pw', args['pw']
])

该命令将失败,因为args['pw']包含一个空字符串。只能在子进程存在时将命令行选项应用于子进程吗?

3 个答案:

答案 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])))