今天在看一个Python代码,里面用到了optparse模块。其中对下面这一句的返回结果我感到很奇怪。
(options, args) = parser.parse_args()该程序的命令行为:
tool.py --syntax headphone_element --syntax-options 1 --generate output.xml按我的理解,这个args变量的值应该为['headphone_element', '1', 'output.xml'],因为该函数一共传进去三个变量。但是真正的结果却是['output.xml'],让我感到很是奇怪,莫非是在代码中调用该模块的方式错误,但是仔细看了所有关于optparse的部分,和官网上的调用方式是完全一样的,怎么会出错呢?于是促使我花了一些时间好好理解这个optprase模块。肯定是在哪里理解错了。
果然经过将近一个小时的仔细阅读,我找到了自己理解错误的原因。在optparse的官网上有下面的两个关键字,option argument和positional argument。翻译过来就是选项参数和位置参数,究竟什么是选项参数和位置参数呢?
选项参数
一个参数后面跟着一个选项,该选项与这个参数紧密相关。当这个选项有值时,可以从这个参数列表中访问该选项的值。以下为选项参数的例子
-f foo --file foo位置参数
参数列表中选项参数被解析后剩下的所有参数。也就是说,选项和它们的参数被解析并从参数列表移出后剩下的部分。
例如,考虑如下假设的命令行:
prog -v --report report.txt foo bar-v和--report都是选项。假设--report带一个参数,report.txt就是一个选项参数。foo和bar是位置参数。
parser.add_option("-v", action="store_true", dest="verbose") parser.add_option("-q", action="store_false", dest="verbose")这里我们有两个不同的选项来对应到同一个变量。但optparse在命令行中遇到-v,那么它就把options.verbose设为True;但它在命令行中遇到-q,则把options.verbose设置为False.
到此就明白了,为什么args的值为'output.xml'的原因了。