gpt4 book ai didi

python - 用于组合其他选项的 Argparse 快捷选项

转载 作者:行者123 更新时间:2023-12-04 01:53:44 27 4
gpt4 key购买 nike

假设我有一个输入文件选项和一个输出文件选项。如何创建将两者结合起来的选项?例如:

$ ./my_script.py -i input.txt -o output.txt

可以组合为:
$ ./my_script.py --io input_output.txt

您可能会说我可以使用 -io 来组合这两个选项,但 -io filename-i -o filename 的快捷方式,而不是 -i filename -o filename

我认为可以将 dest=('input', 'output') 添加到我的 .add_argument() 调用中,但这引发了 dest 必须是字符串的错误。

我尝试在一侧添加一个带有 --io 的互斥组,在另一侧添加一组 -i-o ,但是当使用 -i 运行程序时, -o--help 的帮助文本不再显示:

usage: myscript.py [-h] [--io] [-i INPUT] [-o OUTPUT]

optional arguments:
-h, --help show this help message and exit
--io Use file as both input and output

此外,相互排斥的部分似乎不起作用。我仍然可以使用 --io 以及单独的 -i-o 选项调用脚本,并且不会引发错误。

这是我的骨架代码:
import argparse

parser = argparse.ArgumentParser()

parser.add_argument("-i", "--input", help="Input file")
parser.add_argument("-o", "--output", help="Output file")

parser.parse_args()

带组的代码:
import argparse

parser = argparse.ArgumentParser()

exclusive = parser.add_mutually_exclusive_group()
exclusive.add_argument("--io", help="Input and Output")

sub = exclusive.add_argument_group()
sub.add_argument("-i", "--input", help="Input file")
sub.add_argument("-o", "--output", help="Output file")

args = parser.parse_args()

if args.io:
in_file = out_file = args.io
else:
in_file = args.input
out_file = args.output

最佳答案

解释为什么事情不起作用比提出解决方案更容易。

是的,dest 必须是字符串;没有提供 dest 值的列表或元组。但是您的 in_file = out_file = args.io 很好地解决了这个问题。你也可以使用:

 args.in_file=args.out_file = args.io

在解析后按摩 args 值没有任何问题。
argument_group 不是为嵌套而设计的,也不是向 mutually_exclusive_group 添加“任何”(或“和”)逻辑的方式。也许在遥远的将来会有一种定义完整逻辑组合的方法,但现在不行。其实做测试并不难;很难定义 API 和使用格式。

还要记住, mutually_exclusive_group 用于格式化参数的使用和测试 co_ocurrance,而 argument_group 用于对参数帮助行进行分组。两个截然不同的目的。

如果 -istore_true 参数,那么 -io filename 将被理解为 -i -o filename 。但是翻译它太 -i filename -o filename 不在当前代码中(并且可能不够常见以保证补丁)。

如果您仍然想使用 -i-o--io (我更喜欢 -- 用于 2 个字符标志),我可以建议以下几点:
  • 编写一个自定义用法来演示您想要的内容。如果很难写出清晰的用法,那么你的设计可能太复杂了。
  • 解析后做你自己的 exclusive groups 测试。 args.in_file is None 是测试是否使用标志的好方法。另一种可能性是定义默认值,这样您就不必关心用户使用哪种组合。
  • 关于python - 用于组合其他选项的 Argparse 快捷选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38024501/

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