【发布时间】:2018-12-22 12:08:27
【问题描述】:
如何让 argparse 只解析位置参数之后的命令?
如果我有命令 pythonfile.py -d dir -e test pos_cmd_1 -d
我怎样才能让第一个 -d 由 argparse 解析,而位置命令之后的任何内容都由该命令本身解析(基本上将 pos_cmd_1 -d 作为单个参数读取)
所以参数列表将是
- pythonfile.py
- -d 目录
- -e 测试
- pos_cmd_1 -d -s -etc
因此,位置命令之前的任何内容都是可选的。位置命令之后的任何内容都将成为位置命令本身的一部分。
编辑:当尝试使用双破折号运行命令时,它告诉我后面的参数无法识别。
pythonfile.py -d testdir -e test -- command -d -s
它说-d -s 是无法识别的参数,而不是将它们与命令捆绑在一起。
【问题讨论】:
-
用双破折号结束开关怎么样?
pythonfile.py -d dir -e test -- pos_cmd_1 -d至少很清楚选项在哪里停止 -
您能否提供一些背景信息:您认为您为什么要这样做?
-
@jonrsharpe 为 docker-compose 编写一个包装器,让我可以添加自定义可扩展性,并且一些参数标志与 docker 命令的参数标志重叠。因此,如果
-d在 compose 命令(up/start/kill/etc)之前,则将其解析为我的命令,但如果在之后,它将成为 docker 命令的一部分。所以python.py -d test up -d,其中第二个-d将由docker 解析。 -
在这种情况下使用
--,它经常出现在“...然后将这些参数传递给任何那个调用”。 -
在我看来,应该从 shell 正确调用该实用程序(即根据其记录的用法)。为此目的使用引号或双破折号。这些都是众所周知的标准,应该遵守。示例:
pythonfile.py -d dir -e test "pos_cmd_1 -d"