如果sys.argv完全通过,为什么getopt不工作?

时间:2009-10-08 20:48:48

标签: python getopt

如果我在getopt使用此功能:

import getopt
import sys

opts,args = getopt.getopt(sys.argv,"a:bc")
print opts
print args

opts将为空。不会创建任何元组。但是,如果我使用sys.argv[1:],一切都按预期工作。我不明白为什么会这样。有人在乎解释吗?

2 个答案:

答案 0 :(得分:13)

sys.argvsys.argv[0])的第一个元素是当前正在执行的脚本的名称。因为此脚本名称(可能)不是有效参数(并且可能不以---开头),getopt不会将其识别为参数。由于getopt如何工作的性质,当它看到的东西不是命令行标志(不是以---开头的东西)时,它会停止处理命令 - 行选项(并将其余参数放入args),因为它假定其余参数是将由程序处理的项(例如文件名或其他“必需”参数)。

答案 1 :(得分:6)

这是设计的。回想一下,sys.argv [0]是正在运行的程序名,而getopt不需要它。

来自文档:

  

解析命令行选项和   参数列表。 args是争论的焦点   要解析的列表,没有前导   参考正在运行的程序。   通常,这意味着sys.argv [1:]。   options是选项字符串   脚本想要的字母   认识到,需要的选项   一个后跟冒号的参数(':';   即,与Unix相同的格式   getopt()使用)。

http://docs.python.org/library/getopt.html