【发布时间】:2020-10-02 01:14:03
【问题描述】:
我想模拟大多数命令行实用程序的行为,其中可选参数可以放在命令行中的任何位置,包括 between 位置参数,例如在这个mkdir 示例中:
mkdir before --mode 077 after
在这种情况下,我们知道 --mode 正好有 1 个参数,因此 before 和 after 都被视为位置参数。可选部分,--mode 077,真的可以放在命令行中任何地方。
但是,对于argparse,以下代码不适用于此示例:
# mkdir.py
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--mode', nargs=1)
parser.add_argument('dirs', nargs='*')
args = parser.parse_args()
运行./mkdir.py before --mode 077 after 会导致:
mkdir.py: error: unrecognized arguments: after
如何让argparse 接受位置参数之间的可选参数(具有固定的、已知数量的项目)?
【问题讨论】:
-
确切地说,它不是“大多数”实用程序,而是那些使用库的实用程序不会将第一个非可选参数视为选项的结束(例如 GNU
getopts) . -
argparse不支持这种风格。