- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在编写一个程序,它接受两个参数(路径)和一个选项 -l
,女巫可以将日志保存在日志文件中。
我正在使用 argparse
并创建以下参数:
parser.add_argument('-l', '--logfile',
nargs='?',
const='tranfer.log',
default=False,
help='save log of the transfer')
这些是使用形式:
prog.py path_1 path_2
。没什么特别的。prog.py -l 文件名 path_1 path_2
。将日志保存在 filename
文件中。prog.py -l path_1 path_2
。默认情况下将日志保存在文件中(例如,logfile
)。我在第 3 项中遇到问题,因为 prog.py
将 path_1
作为日志文件的文件名。这个问题很容易解决,在行尾输入 -l
选项。
prog.py path_1 path_2 -l
但我想知道是否有办法告诉 argparse
使用最后两个选项作为路径文件,因为我不是唯一使用该程序的人。
路径参数添加如下:
parser.add_argument('left_path',
action='store',
help='first path')
parser.add_argument('right_path',
action='store',
help='second path')
最佳答案
你的评价是对的,
prog.py -l path_1 path_2
会将 path_1
分配给 l
并将 path_2
分配给第一个位置,并引发有关缺少第二个位置的错误。
http://bugs.python.org/issue9338 argparse optionals with nargs='?', '*' or '+' can't be followed by positionals
是处理此问题的错误/问题。已提出补丁,但未实现。这不是微不足道的。处理 -l
时,解析器必须向前看以查看需要多少参数来满足位置,并避免使用下一个字符串(即使根据您的定义它完全有权这样做).
在之前的 SO 问题中也讨论过。
https://stackoverflow.com/a/29853186/901925
https://stackoverflow.com/a/26986546/901925
您必须将可选的放在最后,或者使用其他一些方式来表示其参数列表的结尾(--
或其他标记的可选)。或更改参数定义,使 -l
不是 ?
(或等效项),或将位置更改为已标记。
关于python - argparse:作为标志和变量的可选参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37504090/
我正在尝试用 Swift 编写这段 JavaScript 代码:k_combinations 到目前为止,我在 Swift 中有这个: import Foundation import Cocoa e
我是一名优秀的程序员,十分优秀!