python - 帮助文本中的 Python argparse 参数顺序
问题描述
我的 Python 程序使用 argparse 模块接受命令行参数,它按预期工作,但是,帮助文本有点误导,我想使用我的程序为其他人修复它。
目前,我有一个位置参数,它是一个目录和一个可选参数,它使用函数的参数-p
接受任意数量的包名称。DIR 位置参数需要在可选参数列表之前指定,否则该目录将被错误地添加到包名称列表中,并且会出错说没有指定位置参数。帮助输出当前如下所示:nargs=+
add_argument
package_info.py --help
usage: package_info.py [-h] [-v] [--no-cache] [-g FILE] [-p [PKG [PKG ...]]]
DIR
Get information on packages in ros workspace.
positional arguments:
DIR The directory containing rospackages.
optional arguments:
-h, --help show this help message and exit
-v, --verbose Enables verbose mode
--no-cache Do not cache the dependency graph
-g FILE, --graph-file FILE
The graph file to load from or save to.
-p [PKG [PKG ...]], --packages [PKG [PKG ...]]
The packages to provide information on.
我希望将其格式化为在 -p 标志之前显示 DIR,以便用户更清楚地知道必须首先指定此参数,如下所示:
package_info.py --help
usage: package_info.py DIR [-h] [-v] [--no-cache] [-g FILE] [-p [PKG [PKG ...]]]
.
.
.
或者
package_info.py --help
usage: package_info.py DIR
[-h] [-v] [--no-cache] [-g FILE] [-p [PKG [PKG ...]]]
.
.
.
是否有一种简单的方法来格式化帮助消息,或者我需要编写自定义帮助消息格式化程序?
解决方案
你说的是usage
线路。
使用格式化程序确实将它们分开positionals
并将它们放在最后,如果足够长的话,可能会放在它们自己的行上。是的,确实与处理“+”标记的参数有冲突。它不应该,但是修复太复杂了,不能简单地插入。
我不建议更改使用格式化程序 - 这组方法太复杂(且脆弱)而不能成为一个简单的补丁。
在定义时提供自定义usage
参数ArgumentParser
将是最简单的解决方法。我不记得它是如何与换行交互的。
推荐阅读
- metrics - YOLOv5 中指标的含义
- oracle - 在 oracle 中验证脚本
- javascript - 有没有办法选择与另一个相关的数组对象?
- ruby-on-rails - 如何在 Coffeescript 中导入 js 文件?
- javascript - Vue 3:在一个组件中制作其他道具的依赖道具
- r - 填充每个累积最大值内的第一行,有一个扭曲
- swift - Swift 中的粗体动态类型
- html - 如何在中心模式下从左侧启动 Slick Slider
- excel - VBA - 打开范围中列出的多个文件并在多个工作表中复制/粘贴数据
- cuda - 为什么本地内存不适用于动态并行?