getopt python中的长选项和短选项

2024-07-04 05:56:39 发布

您现在位置:Python中文网/ 问答频道 /正文

在下面的代码中,我混合了短期和长期选项。还要注意“-longoption1”用“=”分隔,“-longoption2”用空格分隔。但是getopt不区分space和=for long选项。相反,对于短期权,紧跟在短期权(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,但我找不到我要找的答案的任何参考资料。在

^{pr2}$

Tags: 代码选项space空格价值print期权getopt
1条回答
网友
1楼 · 发布于 2024-07-04 05:56:39

这是遵循BSDGNUgetopt_long(3)约定的正确的预期行为。(请注意,“long option”思想源于GNU,不是posixapi的一部分)。在

从GNU手册页:

A long option may take a parameter, of the form arg=param or arg param.

要将一个长选项传递给程序,该选项的名称和值必须用等号=连接,或者作为{}中的相邻项分隔开,即

 longoption3 longvalue3

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

相关问题 更多 >

    热门问题