【问题标题】:Getting a Python command-line argument using "getopt" when there is no corresponding key在没有对应键时使用“getopt”获取 Python 命令行参数
【发布时间】:2019-04-11 04:34:57
【问题描述】:

我正在编写一个 python 程序,我需要在其中读取各种可选的命令行参数,以及一个 REQUIRED 参数(一个字符串),理想情况下它将是命令行上的最后一个参数。使用getopt 时,我可以读入除此字符串之外的所有内容,除非我将其设置为还需要在其前面使用标志(比如-s),如下所示:

Usage: myProgram.py [options] -s "some string"

Options available:
    -x                                     # Turn on option X
    -y                                     # Turn on option Y
    -a "used-defined parameter 1"
    -b "used-defined parameter 2"
    -c "used-defined parameter 3"
    -d "used-defined parameter 4"
    -s "used-defined string" (REQUIRED)

处理参数的代码如下:

    (opts, args) = getopt.getopt(argv[1:], 'xya:b:c:d:s:')

这会将参数解析为允许的命令行选项的键值对。

相反,我想允许用户这样输入:

Usage: myProgram.py [options] "some string"

没有-s 标识符。正如上面所写,如果-s 没有明确包含,getopt 代码将不会捕获最后一个字符串。我不能简单地假设mystring = sys.argv[-1],因为它可能是其他可选参数之一的参数。我应该如何修改 getopt 行(或者我应该添加什么额外的步骤)以在没有密钥来识别它的情况下捕获最后一个字符串,而不会将它与另一个现有密钥混淆?

【问题讨论】:

  • 您愿意改用argparse 吗?它对这种东西的支持要好得多。
  • @gmds - 我宁愿不必重写整个命令行解析代码,特别是因为这是唯一不能按我想要的方式工作的部分(其余部分工作得很好)。
  • 对非可选的东西使用“选项”是自相矛盾的。只需从args 领取即可。
  • @tripleee - 这根本没有帮助,它完全忽略了最重要的一点:如何捕获该字符串 同时不将其与另一个现有键的值混淆.
  • 我不认为 感到困惑。如果您希望能够在有或没有参数的情况下说出-s,那是个问题;但是拥有选项和非选项参数完全是微不足道的。

标签: python getopt


【解决方案1】:

解决方案(@tripleee 建议)是添加几行额外的行来捕获剩余的命令行参数并将它们分配给我需要在代码中使用的变量。具体来说:

    (opts, args) = getopt.getopt(argv[1:], 'xya:b:c:d:')
    if args != "":
        if len(args) == 1:
            myString = args[0]
        else:
            myString = " ".join(args)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-23
    • 1970-01-01
    • 2013-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多