【问题标题】:OptionParser() display choices when --help in PythonOptionParser() 在 Python 中 --help 时显示选项
【发布时间】:2014-08-10 07:42:21
【问题描述】:

我需要为我的脚本创建一个“接口”,以便(由 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 :(

【问题讨论】:

  • 您想为您的脚本添加选项吗?或希望创建互动区?喜欢:选择您的选项:1)foo 2)bar,然后用户将选择其中之一。 ?
  • 它需要在 cronjob 上运行...所以不能交互:(
  • 我没有完全理解你。你想在python 2.4 的脚本中得到argv 吗?所以你没有测试sys.argv
  • 在我指定 --help 详细信息的 OptionParser 代码中,我需要添加新行...这可能吗?
  • 帮助内容的新行?你的意思是这样的:“选择:\n\tdog\n\tcat\n\tfish”?

标签: python optparse optionparser


【解决方案1】:

尝试查看 argparse 的文档,应该做你需要的 - 并且默认内置帮助(-h,--help)

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

【讨论】:

  • 需要兼容 2.4 :(
  • 您可以为 2.7 之前的版本安装它 - google it
  • @user3388884 不,你不会......即使你这样做了,正如 gkusner 所指出的,你可以将argparse 作为第三方模块安装。见the PyPI page.,其实argparse可以从python2.3开始运行。
【解决方案2】:

这是如何更改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

In 会向您显示类似这样的结果:

Usage: 
    Choices:
        dog
        cat
        fish


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

【讨论】:

    【解决方案3】:

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

    Set a default choice for optionparser when the option is given

    Processing multiple values for one single option using 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
    

    【讨论】:

    • 问题有点不同。我试图发表评论,但我没有足够的声誉,现在有一个指向该类似问题的链接。感谢您的提示,下次我会详细说明一个更好的答案!
    • 我已经改进了答案,包括示例代码、另一个问题的改编和缩短版本。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-14
    • 2015-04-05
    • 1970-01-01
    • 1970-01-01
    • 2013-03-26
    • 1970-01-01
    • 2021-05-19
    相关资源
    最近更新 更多