繁体   English   中英

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

[英]Optionally pass argument to subprocess in python

在我的脚本中,我使用可选的命令行参数调用一个可执行文件(如果通过,此参数会打开可执行文件中的一个函数,默认情况下该函数是关闭的)。 我想直接从脚本本身的参数控制这个选项。 现在写我做:

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

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

使用列表切片:

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

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

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

更新替代方案

您还可以使用list * bool

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

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

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

IMO 比当前建议更具可读性的替代方法是使用列表解包:

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

和你的例子:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM