[可选将参数传递给python中的子进程

问题描述 投票:1回答:2

在我的脚本中,我使用可选的命令行参数调用可执行文件(如果传递了此参数,则该参数将打开可执行文件中的功能,默认情况下处于关闭状态)。我想直接从脚本本身的参数控制此选项。我现在写:

import subprocess
option = False
if option:
    check = subprocess.Popen(['executable', '--option'])
else:
    check = subprocess.Popen(['executable'])

我试图找到一种更紧凑的方法:

import subprocess
option = False
check = subprocess.Popen(['executable', '--option' if option else ''])

但是这会在其本身中引发错误“未知选项”。

这会在python中引发错误:

import subprocess
option = False
check = subprocess.Popen(['executable', '--option' if option else None])

所以,我的问题:是否有办法在一行中将可选参数传递给子流程?

python subprocess command-line-arguments
2个回答
2
投票

使用列表切片:

>>> ['executable', '--option'][:1 + False]
['executable']
>>> ['executable', '--option'][:1 + True]
['executable', '--option']

>>> False == 0
True
>>> True == 1
True

check = subprocess.Popen(['executable', '--option'][:1 + option])

UPDATE替代

您也可以使用list * bool

>>> ['a'] * True
['a']
>>> ['a'] * False
[]

使用此选项,您可以组合多个选项:

check = subprocess.Popen(['executable'] +
                         ['-option1'] * option1 +
                         ['-option2'] * option2)

0
投票

与当前建议相比,IMO更易读的替代方法是使用列表拆包:

*(['--opt=val'] if opt else [])

以及您的示例:

check = subprocess.Popen([
    'executable',
    *(['--option'] if option else [])
])
© www.soinside.com 2019 - 2024. All rights reserved.