0

getopt我在我的代码中有以下用法:

opts, args = getopt.getopt(sys.argv[1:], "", ["admit=", "wardName="])

然后我在以下问题中从命令行运行代码:

Test.py --args --admit=1 --wardName="CCU"

当我打印 的内容时opts,我得到以下输出:

[('--admit', '1'), ('--wardName', 'CCU')]

一个问题是这个结果的数据类型是什么?在我看来,这就像一个元组列表。那是对的吗?

第二个问题- 是否有任何方便的方法来处理这样的元组对(如果这些是元组)?例如,我现在怎么说:如果 admission == 1 then do X?我想过将元组转换为字典,但这是一个好习惯吗?

PS它不应该有任何区别这实际上是 Jython 而不是纯 Python。

4

3 回答 3

1

Python 文档的首页将 Python 库文档描述为“把它放在枕头底下”。getopt 上的页面位于:

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

您从 getopt 返回两个列表:您提到的元组列表,然后是解析所有选项后剩余参数的列表。尝试这个:

import getopt
args = ['-a', '-b', '-cfoo', '-d', 'bar', 'a1', 'a2']
opts, args = getopt.getopt(args, "abc:d")
print ("opts=" + str(opts))
print ("args=" + str(args))
optdic = dict(opts) # convert options to dictionary
print ("optdic['-c'] = " + str(optdic['-c']))

输出:

opts=[('-a', ''), ('-b', ''), ('-c', 'foo'), ('-d', '')]
args=['bar', 'a1', 'a2']
optdic['-c'] = foo
于 2013-08-26T06:33:06.457 回答
0

使用选项和值的便捷方式:

import getopt, sys

def main():
    try:
        opts, args = getopt.getopt(sys.argv[1:], "", ["admit=", "wardName="])
        print opts
    except getopt.GetoptError, err:
        # print help information and exit:
        print str(err)
        sys.exit(2)

    admitArg = False
    wardName = ""

    for o, a in opts:
        if o == "--admit":
            admitArg = a
        elif o == "--wardName":
            wardName = a
        else:
            assert False, "unhandled option"

    # do something with the argument values
    if admitArg:
        print "--admit is True"

    if wardName == "Foobar":
        print "wardName is Foobar!"

if __name__ == "__main__":
    main()
于 2013-08-26T07:12:32.210 回答
0

是的,它是一个元组列表。你可以type()用来检查。

字典可以正常工作。

D = dict(opts)
print D['--admit']
print D['--wardName']
于 2013-08-26T06:33:22.353 回答