【问题标题】:Getopt not reading all optionsGetopt 不阅读所有选项
【发布时间】:2016-11-16 02:16:16
【问题描述】:

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

【问题讨论】:

  • 您的条件不正确,也许您的意思是:if o in ['-h', '--help']:

标签: python command-line getopt


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-04
    • 2019-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多