Python中使用OptionParser()显示--help时的选项

1 投票
3 回答
1436 浏览
提问于 2025-04-18 10:23

我需要为我的脚本创建一个“接口”,这个脚本是通过定时任务(crontab)来运行的:

  1. 当输入 --help 时,终端会显示一个选择列表(格式要好,选项之间用\n分开)
  2. 允许输入多个选择(用逗号分隔)

比如说(类似下面的内容)

python feedAnimals.py --help 
...... Choices:
           dog
           cat
           fish

python feedAnimals.py --pets dog,cat,fish

有没有办法用 type="choices" 来实现这个功能?或者我可以用 type="string" 吗?我尝试在“帮助”选项下的选择之间插入 \n,但在运行时这些似乎被忽略了。

必须兼容Python 2.4 :(

3 个回答

1

看看这些相关的问题,第一个问题有一个很好的“type='choice'”示例,第二个问题则涉及多个值:

在给定选项时,为optionparser设置默认选择

使用getopt/optparse处理单个选项的多个值?

你可以使用类似这样的方式,或者手动处理这些参数:

from optparse import OptionParser

def get_args():
  usage = "Usage: %prog [options]"

  parser = OptionParser()

  parser.add_option("--pet",
    type = "choice",
    action = 'append',
    choices = ["dog", "cat", "fish"],
    default = [],
    dest = pets,
    help = "Available pets: [dog, cat, fish]"
  )

  (options, args) = parser.parse_args()

  print options, args
  return (options, args)

(opt, args) = get_args()
print opt.pets

然后,运行:

python test.py --pet cat --pet dog --pet fish
1

这是一个如何改变 usage 值的例子。试试看:

from optparse import OptionParser 
string = "Choices:\n\tdog\n\tcat\n\tfish"
parser = OptionParser(usage=string)
(options,args) = parser.parse_args()

你也可以把你的 string 改成这个样子:

string = """
    Choices:
        dog
        cat
        fish
"""

然后测试一下:

$python code.py --help

它会给你显示类似这样的结果:

Usage: 
    Choices:
        dog
        cat
        fish


Options:
  -h, --help  show this help message and exit
1

你可以看看argparse的文档,这个工具应该能满足你的需求。而且帮助功能(-h,--help)默认就有,非常方便。

https://docs.python.org/2/library/argparse.html

撰写回答