【问题标题】:Python argument to provide less-like limiting functionalityPython 参数提供不太像的限制功能
【发布时间】:2011-12-30 17:51:55
【问题描述】:

知道是否有 clean 方法可以使 optparse 绕过/处理通用的 -XXX 选项?

我的案例是一个应用程序,我想为其提供一个less 类似选项,以将应用程序的输出条目限制为在- 之后定义的数字

例如

myapp.py list -10

我想我可以覆盖 sys.argv dict 以避免 optparse 引发错误并手动解析/删除自定义参数,但我想知道这是否是 optparse lib 预见并提供更好的方法去做吧。

【问题讨论】:

  • 我建议改为查看argparse
  • +1 for argparse,这让这很容易。在optparse 中执行此操作需要您创建自定义Option 类和自定义OptionParser 类。即使这样,也很难将选项集群与这些“裸”选项区分开来(例如,myapp.py list -10 是指 myapp.py list -1 -0(optparse 的默认值)还是 -10
  • 感谢 cmets,如何使用 argparse 实现它?

标签: python command-line-arguments optparse


【解决方案1】:

在 argparse 中,您可以定义一个可选的位置整数参数。负值会在用户看来就像给了一个选项:

import argparse
parser = argparse.ArgumentParser()
parser.add_argument('limit', type=int, nargs='?')
args = parser.parse_args()
if args.limit is not None:
    print "Limiting to %d." % -args.limit

在这种情况下,默认的帮助文本是不合理的,但可以使用 metavar 关键字参数调整为 add_argument,例如使用"-n".

我只能用 optparse 想出一个看起来很讨厌的方法来做到这一点。基本上为数字开头的每个数字定义一个单独的选项:

from optparse import OptionParser
parser = OptionParser()
parser.add_option("-1")
parser.add_option("-2")
options,args = parser.parse_args()
if options.__dict__["1"] is not None:
    print "Your number was %d." % (int("1"+options.__dict__["1"]))
elif options.__dict__["2"] is not None:
    print "Your number was %d." % (int("2"+options.__dict__["2"]))

对于所有直到 9 的数字都以此类推。还要考虑是否需要考虑 0...

【讨论】:

  • 确实很讨厌 :),加上它的限制,因为在我的情况下,我希望数字是 1 到无限
  • 嗯,这个数字可以达到(但不包括)无穷大。您只需要 1 - 9 的选项,其余数字取自选项参数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-08
  • 2016-07-06
  • 2012-05-27
  • 2010-10-07
相关资源
最近更新 更多