【问题标题】:long options and short options in getopt pythongetopt python中的长选项和短选项
【发布时间】:2018-03-05 10:29:08
【问题描述】:

在下面的代码中,我混合了短选项和长选项。另请注意,“--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)

【问题讨论】:

  • “不编译”是什么意思?你看到什么样的错误输出?
  • 我收到此错误“GetoptError:选项 --longoption3longvalue3 无法识别”

标签: python getopt


【解决方案1】:

这是遵循BSDGNU getopt_long(3) 约定的正确预期行为。 (请注意,“长选项”的想法源自 GNU,不是 POSIX API 的一部分)。

来自 GNU 手册页:

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

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

--longoption3 longvalue3

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

【讨论】:

  • 谢谢。我认为这部分“值必须由等号 = 连接,或作为 argv 中的相邻项分隔”是关键。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-05-29
  • 1970-01-01
  • 2023-03-08
  • 1970-01-01
  • 1970-01-01
  • 2014-12-13
  • 1970-01-01
相关资源
最近更新 更多