gpt4 book ai didi

python - argparse:作为标志和变量的可选参数

转载 作者:行者123 更新时间:2023-11-28 17:27:35 26 4
gpt4 key购买 nike

我正在编写一个程序,它接受两个参数(路径)和一个选项 -l,女巫可以将日志保存在日志文件中。

我正在使用 argparse 并创建以下参数:

parser.add_argument('-l', '--logfile', 
nargs='?',
const='tranfer.log',
default=False,
help='save log of the transfer')

这些是使用形式:

  1. prog.py path_1 path_2。没什么特别的。
  2. prog.py -l 文件名 path_1 path_2。将日志保存在 filename 文件中。
  3. prog.py -l path_1 path_2。默认情况下将日志保存在文件中(例如,logfile)。

我在第 3 项中遇到问题,因为 prog.pypath_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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com