getopt python中的长选项和短选项

问题描述 投票:0回答:1

在下面的代码中,我混合了短期和长期期权。还要注意“--longoption1”用“=”分隔,“ - longoption2”用空格分隔。但getopt不区分空间和=长期选项。相反,对于短期期权,短期权(x,y,z)后面的任何内容都被视为期权的价值。注意“-x:shortvalue1 -y shortvalue2 -zshortvalue3”x用空格分隔,y用空格分隔,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)
python getopt
1个回答
1
投票

根据BSDGNU getopt_long(3)惯例,这是正确的,预期的行为。 (请注意,“长选项”的想法源自GNU,而不是POSIX API的一部分)。

从GNU手册页:

long选项可以采用--arg=param--arg param形式的参数。

要将长选项传递给程序,选项的名称和值必须通过等号=连接,或者在argv中分隔为相邻项,即

--longoption3 longvalue3

将它们连接在一起将导致底层的getopt_long库函数将此部分识别为一个长选项,其名称为longoption3longvalue3,这是正确无法识别的。

© www.soinside.com 2019 - 2024. All rights reserved.