Python argparse:-o和--option之间的差异

时间:2017-06-14 22:57:01

标签: python argparse

我正在尝试理解argparse包,但我真的无法找到这个非常简单的问题的答案:

  • 添加参数时-a--argument之间有什么区别?

有时,我会在add_argument()中找到这两个:

parser.add_argument(
        "-f", "--file",
        help="file path"
        )

3 个答案:

答案 0 :(得分:2)

如果两者都被指定,那么argparse将以长格式('argument')而不是短格式('a')存储值。它将推断出目的地,因此“--foo-bar”将存储在foo_bar

您可以将短格式混合在一起并使用单个连字符(-af)但与某些* NIX命令不同,顺序很重要:如果您的参数需要值(-f filename),那么参数必须作为短格式参数组的最终参数出现:

cmd -af my_file   # works
cmd -fa my_file   # does not work

将此与允许tar(1)的怪物tar -cfC myfile.tar ./directory进行比较,并将其正确排序为逻辑等效于tar -c -f myfile.tar -C ./directory。此外,某些长格式允许在指定选项tar -cf myfile.tar时使用'=',而不是tar -c --file=myfile.tar。你不能在短格式上使用'='。

幸运的是,python argparse并不关心'='。使用与否,简短形式或长形式。

# All equivalent:
  cmd -af=my_file
  cmd -a -f my_file
  cmd -a -fmy_file
  cmd -afmy_file
  cmd --file my_file -a
  cmd --file=my_file -a

重要吗?另一个答案表明,长形式有助于提高可读性。简短的表格可以让你的超级用户更快乐。

答案 1 :(得分:0)

有时使用长选项名称可能更容易,尤其是模糊名称或短选项难以获得时,有时它恰恰相反。如果您认为可能出现这种情况,您可以选择两种形式的选项,并让用户选择他喜欢的。

您想要script.py -r1000还是script.py --repeat 1000?我会说这都是关于品味的,如果你和很多人一起使用它,你可能会考虑他们的。

  

添加参数时,-a--argument之间有什么区别?

只要您在add_argument函数中添加它们,答案就是 - -a您可以在-a之后粘贴值(如果有的话),不需要的空间,如第二段中的示例。没有,没有。

答案 2 :(得分:0)

试图捕捉' - ' vs' - '。

简而言之,两种参数都具有同等的能力。我不能想到你可以用一种类型而不是另一种类型做任何事情(除了用单个连字符捣碎的单个字符,通常是python程序员不能这样做。)。

  • -

    • 称为短格式参数。
    • E.g。 -f filename
    • 将此选项用于程序用户将始终使用或易于理解的参数。
    • 通常这一直存在。
  • --

    • 称为长格式参数名称。
    • E.g。 --directory /root/foobar
    • 此格式通常仅在参数具有多个竞争单个字符时使用。例如。如果您的代码接受d irectory和d吃,那么请更好地提及两者的长格式选项。
    • 这种类型并不总是存在(除非你有一个温和的强迫症,总是提供短形式和长形式。)