“getopt”函数的意外结果

时间:2016-05-03 14:44:44

标签: python getopt

我有以下功能:

def getOptions(logfile):
    try:
        options, arguments = getopt.getopt(programArguments[1:], 'nt:v:L:d:', ['help'])
    except getopt.GetoptError:
        print("\nERROR: Invalid Option")
        usage()
        exit()  

其中programArguments = sys.argv

getopt函数始终不会向options返回任何内容,并将programArguments[1:]的副本返回argumentsgetopt在哪里出错?

修改

请参阅下面的答案,我意识到自己的错误。

2 个答案:

答案 0 :(得分:0)

你在每个争论之前使用破折号吗? (例如python program.py -n 1)?如果你像python program.py n 1那样运行它,它就会进入争论。

如果要传递未分配给值的值,则只应在arguments中看到值。因此,我得到了这个电话:

> python test_getopt.py --treatment=1

options: [('--treatment', '1')] arguments: []

然后,您将遍历(键,值)选项对。

另一方面,如果我传递一个与键没有关联的附加值,它将被插入到参数列表中。例如:

> python test_getopt.py --treatment=1 temp.txt

options: [('--treatment', '1')] arguments: ['temp.txt']

有关更全面的文档,请参阅getopt documentation

答案 1 :(得分:0)

我意识到因为我的程序将文件作为argv[1]getopt一旦发现argv[1]不是有效选项就会退出。更改为programArguments[2:]解决了问题。