gpt4 book ai didi

linux - 执行命令时双破折号有什么作用?

转载 作者:太空狗 更新时间:2023-10-29 11:37:23 26 4
gpt4 key购买 nike

问题:

当双破折号后有命令时,应用程序应如何解析命令行?(不重复 thisthis )

我知道双破折号通常会做什么:

A -- signals the end of options and disables further option processing. Any arguments after the -- are treated as file‐ names and arguments. An argument of - is equivalent to --

因此它将以下内容设置为参数,例如: myapp -f <args> ...那么$ myapp -f -- -a -b会治疗-a-b作为 -f 的参数, 而不是标志

但是当应用需要时会发生什么:

myapp cmd <arg> -f <args>...

命令行是$ myapp -f -- test cmd sth , 是否应该解析为:

  • myapp收到一个-f带有参数的标志 test , cmdsth
  • myapp收到一个cmd命令后跟 sth , 一个 -f带参数 test

我正在为 python 编写一个命令行解析器,所以我需要知道它应该如何运行。

非常感谢:)

最佳答案

你写的

$ myapp -f -- -a -b will treat -a and -b as arguments of -f, instead of Flags

不完全是。双破折号使 -a-b 成为 myapp 的参数。如果 -f 需要一个参数,使用双破折号会引发错误,因为没有给出这样的参数。

如果你的解析器定义了一个子解析器,它之前的任何选项都被假定为由主解析器定义的选项,并且子命令后面的任何选项都是子解析器的一部分。例如,用

p = ArgumentParser()
p.add_argument("-v", action='store_true')
sp = p.add_subparsers()
p1 = sp.add_parser('cmd')
p1.add_argument('-v')

命令行 myapp -v cmd -v test 会区别对待两个 -v;第一个是在 p 上定义的 store_true 选项,第二个是在 p1 上定义的选项。你的命令行

myapp -f -- test cmd sth

如果 -f 需要参数则产生错误。如果 -f 没有,那么 myapp 只是一个选项 -f 和 3 个位置参数 test, cmdsth

关于linux - 执行命令时双破折号有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26282344/

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