You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python Click中将命令行剩余内容读入最后一个参数,忽略已有选项?

解决Click中捕获包含重复选项的剩余参数问题

要实现将脚本路径后的所有参数(包括与主脚本选项重名的内容)完整捕获为最后一个参数,只需在Click命令的context_settings中设置allow_interspersed_args=False,同时将最后一个位置参数设为nargs=-1来接收所有剩余内容。

示例代码

import click

@click.command(context_settings={"allow_interspersed_args": False})
@click.option("-d", "--detach", is_flag=True, help="Detach the launcher process")
@click.argument("script_path")
@click.argument("script_args", nargs=-1)
def launcher(detach, script_path, script_args):
    print(f"Detach: {detach}")
    print(f"Script path: {script_path}")
    print(f"Script args: {script_args}")

if __name__ == "__main__":
    launcher()

原理说明

  • allow_interspersed_args=False:告诉Click所有主脚本的选项必须放在位置参数(这里是script_path)之前,位置参数之后的任何内容(包括看起来像选项的-d)都会被当作普通的位置参数处理,不会被解析为主脚本的选项。
  • script_args的nargs=-1:表示该参数会捕获所有剩余的位置参数,不管数量多少,完美承接脚本路径后的所有内容。

测试验证

运行命令:

python launcher.py my_script.py -a -b -c -d -e

输出结果:

Detach: False
Script path: my_script.py
Script args: ('-a', '-b', '-c', '-d', '-e')

完全符合需求。如果需要启用主脚本的detach选项,只需将-d放在脚本路径之前:

python launcher.py -d my_script.py -a -b -c -d -e

此时输出:

Detach: True
Script path: my_script.py
Script args: ('-a', '-b', '-c', '-d', '-e')

主脚本的-d被正确识别,传递给子脚本的-d也被完整保留。


内容的提问来源于stack exchange,提问作者Petr Synek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 04:12:13