getopt 中的多头选项和空头选项 python
long options and short options in getopt python
在下面的代码中,我混合了短选项和长选项。另请注意,“--longoption1”由“=”分隔,“--longoption2”由 space 分隔。但是 getopt 不区分 space 和 = 对于长选项。相反,对于空头期权,空头期权 (x,y,z) 后的任何内容都被视为期权的价值。请注意“-x:shortvalue1 -y shortvalue2 -zshortvalue3”x 由 : 分隔,y 由 space 分隔并且 z 甚至没有被任何分隔,但仍然像我想象的那样进行 getopt 解析。
import sys, getopt
commandoptions = "--longoption1=longvalue1 --longoption2 longvalue2 -x:shortvalue1 -y shortvalue2 -zshortvalue3"
parsedoptions = commandoptions.split()
print("Split by space ", parsedoptions)
opts, additionalArgs = getopt.getopt(parsedoptions, "x:y:z:", ["longoption1=", "longoption2="])
print("options ", opts)
继续,为什么下面的代码会失败?请注意,“--longoption3longvalue3”类似于“-zshortvalue3”。我的意思是选项和它的值没有分开。在这种情况下,空头期权仍然有效,但多头期权无效。相反,它会导致以下错误:
GetoptError: option --longoption3longvalue3 not recognized
我一直在关注 https://docs.python.org/3/library/getopt.html,但我找不到我正在寻找的答案的任何参考资料。
import sys, getopt
commandoptions = "--longoption1=longvalue1 --longoption2 longvalue2 --longoption3longvalue3 -x:shortvalue1 -y shortvalue2 -zshortvalue3"
parsedoptions = commandoptions.split()
print("Split by space ", parsedoptions)
opts, additionalArgs = getopt.getopt(parsedoptions, "x:y:z:", ["longoption1=", "longoption2=", "longoption3="])
print("options ", opts)
这是遵循 BSD and GNU getopt_long(3)
约定的正确预期行为。 (请注意,"long option" 想法源自 GNU,不属于 POSIX API)。
来自 GNU 手册页:
A long option may take a parameter, of the form --arg=param
or --arg param
.
要将长选项传递给程序,选项的名称和值必须用等号连接 =
,或者作为 argv
中的相邻项分隔,即
--longoption3 longvalue3
将它们连接在一起将导致底层 getopt_long
库函数将此部分识别为一个名称为 longoption3longvalue3
的长选项,正确地无法识别。
在下面的代码中,我混合了短选项和长选项。另请注意,“--longoption1”由“=”分隔,“--longoption2”由 space 分隔。但是 getopt 不区分 space 和 = 对于长选项。相反,对于空头期权,空头期权 (x,y,z) 后的任何内容都被视为期权的价值。请注意“-x:shortvalue1 -y shortvalue2 -zshortvalue3”x 由 : 分隔,y 由 space 分隔并且 z 甚至没有被任何分隔,但仍然像我想象的那样进行 getopt 解析。
import sys, getopt
commandoptions = "--longoption1=longvalue1 --longoption2 longvalue2 -x:shortvalue1 -y shortvalue2 -zshortvalue3"
parsedoptions = commandoptions.split()
print("Split by space ", parsedoptions)
opts, additionalArgs = getopt.getopt(parsedoptions, "x:y:z:", ["longoption1=", "longoption2="])
print("options ", opts)
继续,为什么下面的代码会失败?请注意,“--longoption3longvalue3”类似于“-zshortvalue3”。我的意思是选项和它的值没有分开。在这种情况下,空头期权仍然有效,但多头期权无效。相反,它会导致以下错误:
GetoptError: option --longoption3longvalue3 not recognized
我一直在关注 https://docs.python.org/3/library/getopt.html,但我找不到我正在寻找的答案的任何参考资料。
import sys, getopt
commandoptions = "--longoption1=longvalue1 --longoption2 longvalue2 --longoption3longvalue3 -x:shortvalue1 -y shortvalue2 -zshortvalue3"
parsedoptions = commandoptions.split()
print("Split by space ", parsedoptions)
opts, additionalArgs = getopt.getopt(parsedoptions, "x:y:z:", ["longoption1=", "longoption2=", "longoption3="])
print("options ", opts)
这是遵循 BSD and GNU getopt_long(3)
约定的正确预期行为。 (请注意,"long option" 想法源自 GNU,不属于 POSIX API)。
来自 GNU 手册页:
A long option may take a parameter, of the form
--arg=param
or--arg param
.
要将长选项传递给程序,选项的名称和值必须用等号连接 =
,或者作为 argv
中的相邻项分隔,即
--longoption3 longvalue3
将它们连接在一起将导致底层 getopt_long
库函数将此部分识别为一个名称为 longoption3longvalue3
的长选项,正确地无法识别。