在没有相应键的情况下使用 "getopt" 获取 Python 命令行参数
Getting a Python command-line argument using "getopt" when there is no corresponding key
我正在编写一个 python 程序,我需要在其中读取各种可选的命令行参数,以及一个理想情况下是命令行最后一个参数的必需参数(字符串)。使用 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 行(或者我应该添加什么额外的步骤)以在没有密钥来识别它的情况下捕获最后一个字符串,而不会将它与另一个现有密钥混淆?
解决方案(如@tripleee所建议)是添加几行来捕获剩余的命令行参数并将它们分配给我需要使用的变量在代码中。具体来说:
(opts, args) = getopt.getopt(argv[1:], 'xya:b:c:d:')
if args != "":
if len(args) == 1:
myString = args[0]
else:
myString = " ".join(args)
我正在编写一个 python 程序,我需要在其中读取各种可选的命令行参数,以及一个理想情况下是命令行最后一个参数的必需参数(字符串)。使用 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 行(或者我应该添加什么额外的步骤)以在没有密钥来识别它的情况下捕获最后一个字符串,而不会将它与另一个现有密钥混淆?
解决方案(如@tripleee所建议)是添加几行来捕获剩余的命令行参数并将它们分配给我需要使用的变量在代码中。具体来说:
(opts, args) = getopt.getopt(argv[1:], 'xya:b:c:d:')
if args != "":
if len(args) == 1:
myString = args[0]
else:
myString = " ".join(args)