Getopt没有阅读所有选项

时间:2016-11-16 02:16:16

标签: python command-line getopt

这是我第一次在python中使用Getopt,我遇到了一个问题:

opts, args = getopt.getopt(sys.argv[1:], "hrs", ["help","random","somethingelse"])

for o, a in opts:
    if o in "-h" or "--help":
        help()
    elif o in "-r" or "--random":
        random()
    elif o in "-s" or "--somethingelse":
        somethingelse()  

如果我输入:python test.py -r或python test.py -s。它仍然会转到帮助函数,而不是转到random()或somethingelse()函数。

1 个答案:

答案 0 :(得分:0)

您需要将可能的选项放在列表或元组中:

opts, args = getopt.getopt(sys.argv[1:], "hrs", ["help","random","somethingelse"])

for o, a in opts:
    if o in ["-h", "--help"]:
        help()
    elif o in ["-r", "--random"]:
        random()
    elif o in ["-s", "--somethingelse"]:
        somethingelse()

你现在拥有它的方式,你的第一个条件if o in "-h" or "--help":是完全有效的Python,但它总是True,因为你实际测试的是"真实性"分别为o in "-h""--help"。这始终为True,因为即使o in "-h"False"--help"始终为True,因为它是非空字符串。

另一方面,如果您对if o in ["-h", "--help"]:进行测试,则会检查o是否为列表["-h", "--help"]中的某个项目,并且只会返回True它是。