Getopt 不阅读所有选项

Getopt not reading all options

这是我第一次在 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() 函数。

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

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,因为你实际测试的是 "truthiness" 分别为 o in "-h""--help"。这始终是 True,因为即使 o in "-h"False"--help" 也始终是 True,因为它是一个非空字符串。

另一方面,如果您测试 if o in ["-h", "--help"]:,这将检查 o 是否是列表 ["-h", "--help"] 中的一项,并且只会 return True 如果是的话。