【发布时间】:2019-04-11 04:34:57
【问题描述】:
我正在编写一个 python 程序,我需要在其中读取各种可选的命令行参数,以及一个 REQUIRED 参数(一个字符串),理想情况下它将是命令行上的最后一个参数。使用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 行(或者我应该添加什么额外的步骤)以在没有密钥来识别它的情况下捕获最后一个字符串,而不会将它与另一个现有密钥混淆?
【问题讨论】:
-
您愿意改用
argparse吗?它对这种东西的支持要好得多。 -
@gmds - 我宁愿不必重写整个命令行解析代码,特别是因为这是唯一不能按我想要的方式工作的部分(其余部分工作得很好)。
-
对非可选的东西使用“选项”是自相矛盾的。只需从
args领取即可。 -
@tripleee - 这根本没有帮助,它完全忽略了最重要的一点:如何捕获该字符串 同时不将其与另一个现有键的值混淆.
-
我不认为 我 感到困惑。如果您希望能够在有或没有参数的情况下说出
-s,那是个问题;但是拥有选项和非选项参数完全是微不足道的。