通过单击将未知标志传递给命令行
Passing unknown flags to command-line with click
问题
使用 python click library 创建命令行工具时,是否可以将未知数量的参数传递给函数?我在想类似于 *args 命令的东西。
用例
我正在尝试为 catkin 构建一个包装器,并希望将 click 用于它附带的所有实用工具。在使用指定命令调用 catkin 之前,此应用程序应执行一些任务,例如更改为工作空间的根目录。例如。 catkin build
编译代码。
这样做的问题是,我不想显式声明您可以传递给 catkin 的每个可能的编译标志,而是只想查看实际命令并将所有参数直接传递给 catkin。
例子
到目前为止,我发现可以使用选项 nargs=-1
定义最后一个参数,它将收集此变量中的所有后续参数。这样您就可以收集例如几个文件名。这几乎就是我要找的东西,除了它不会接受以破折号 -
开头的标志。它会从一个错误说 Error: no such option: -a
#!/usr/bin/python
import click
import subprocess
@click.command()
@click.argument('action', type=click.STRING)
@click.option('--debug', is_flag=True, help='Build in debug mode.')
@click.argument('catkin_args', nargs=-1, type=click.STRING)
def main(action, debug, catkin_args):
""" A wrapper for catkin """
# Do something here ...
if debug:
# Do some more special things...
subprocess.call(["catkin"] + catkin_args)
根据 docs 在 click 4.0+ 中是可能的;您只需要将 catkin_args
的 type
设置为 click.UNPROCESSED
。
文档有一个包装示例 timeit
,就像您描述的那样,您想要使用 catkin 进行包装。
问题
使用 python click library 创建命令行工具时,是否可以将未知数量的参数传递给函数?我在想类似于 *args 命令的东西。
用例
我正在尝试为 catkin 构建一个包装器,并希望将 click 用于它附带的所有实用工具。在使用指定命令调用 catkin 之前,此应用程序应执行一些任务,例如更改为工作空间的根目录。例如。 catkin build
编译代码。
这样做的问题是,我不想显式声明您可以传递给 catkin 的每个可能的编译标志,而是只想查看实际命令并将所有参数直接传递给 catkin。
例子
到目前为止,我发现可以使用选项 nargs=-1
定义最后一个参数,它将收集此变量中的所有后续参数。这样您就可以收集例如几个文件名。这几乎就是我要找的东西,除了它不会接受以破折号 -
开头的标志。它会从一个错误说 Error: no such option: -a
#!/usr/bin/python
import click
import subprocess
@click.command()
@click.argument('action', type=click.STRING)
@click.option('--debug', is_flag=True, help='Build in debug mode.')
@click.argument('catkin_args', nargs=-1, type=click.STRING)
def main(action, debug, catkin_args):
""" A wrapper for catkin """
# Do something here ...
if debug:
# Do some more special things...
subprocess.call(["catkin"] + catkin_args)
根据 docs 在 click 4.0+ 中是可能的;您只需要将 catkin_args
的 type
设置为 click.UNPROCESSED
。
文档有一个包装示例 timeit
,就像您描述的那样,您想要使用 catkin 进行包装。