没有对应的键时,使用“ getopt”获取Python命令行参数

时间:2019-04-11 04:34:57

标签: python getopt

我正在编写一个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行(或应该添加什么额外的步骤)以捕获最后一个字符串?

1 个答案:

答案 0 :(得分:0)

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

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