【问题标题】:How to catch two CLI options and their arguments with getopt?如何使用 getopt 捕获两个 CLI 选项及其参数?
【发布时间】:2014-06-19 08:02:26
【问题描述】:

我正在尝试使 python 脚本能够同时采用两个选项,就像在这个例子中一样:

$ python main.py -o param1 -t table1

我希望能够有两种不同的行为;如果没有 -t 参数,我希望我的脚本处理我的所有 csv 表,如果有 -t 参数,我希望它只处理参数中给出的表。

我使用这样的东西:

import getopt, sys

def main():
    try:
        opts, args = getopt.getopt(sys.argv[1:], "hs:v:t:", ["help", "start=", "table="])
    except getopt.GetoptError as err:
        # print help information and exit:
        print str(err) # will print something like "option -a not recognized"
        usage()
        sys.exit(2)

    for o, a in opts:
        if o == "-v":
            verbose = True
        elif o in ("-h", "--help"):
            usage()
            sys.exit()
        elif o in ("-s", "--start"):
            start = a
        else:
            assert False, "unhandled option"
    # ...

if __name__ == "__main__":
    main()

如果我这样做:print opts

我会找到:[('-o', 'param1'), ('-t', 'table1')]

但我无法找到获得第二个选项参数的方法。 你可以帮帮我吗?谢谢。

【问题讨论】:

  • 如果可以的话,我建议切换到 argparse。它内置于 2.7 和 3+,并且在 pypi 中有一个用于早期版本的 argparse backport。
  • 为什么没有elif o in ("-t") 子句?
  • 我想看看第一个选项是否得到验证,然后如果有第二个选项,我会做一些具体的事情。例如:elif o in ("-h", "--help"): if a in ("-t", "--table"): table = arg
  • 我不确定您所说的“我无法找到获得第二个选项参数的方法”是什么意思。你具体说的是哪个论点?
  • 第二个参数是table1

标签: python command-line-arguments getopt


【解决方案1】:

您确实会更好地使用可以为您提供参数字典的东西,也许像 docopt,但如果您必须使用 getopt,那么您可以:

>>> opts = [('-o', 'param1'), ('-t', 'table1')]
>>> for a,b in opts:
...     if a == '-t':
...         table = b
>>> print table
table1

【讨论】:

    猜你喜欢
    • 2021-12-27
    • 2011-12-01
    • 1970-01-01
    • 2014-03-22
    • 1970-01-01
    • 2021-08-31
    • 2013-12-22
    • 2013-03-06
    • 1970-01-01
    相关资源
    最近更新 更多