[英]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.