- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
问题:
当双破折号后有命令时,应用程序应如何解析命令行?(不重复 this 和 this )
我知道双破折号通常会做什么:
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
, cmd
和 sth
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
, cmd
和 sth
。
关于linux - 执行命令时双破折号有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26282344/
我是一名优秀的程序员,十分优秀!