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