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