Python optparse 默认值与函数默认值

标签 python dry optparse

我正在编写一个 python 脚本,我希望它能够从命令行调用并作为库函数导入。 理想情况下,命令行选项和函数应使用同一组默认值。 允许我在两个地方重复使用一组默认值的最佳方法是什么?

这是具有重复默认值的当前代码。

from optparse import OptionParser

def do_stuff(opt1="a", opt2="b", opt3="c"):
    print opt1, opt2, opt3

if __name__ == "__main__":
    parser = OptionParser()
    parser.add_option("--opt1", default="a")
    parser.add_option("--opt2", default="b")
    parser.add_option("--opt3", default="c")
    #parser.set_defaults(opt1="a")

    options, args = parser.parse_args()

    do_stuff(*args, **vars(options))

最佳答案

我会通过反省感兴趣的函数来适本地设置选项和默认值来处理它。例如:

import inspect
from optparse import OptionParser
import sys

def do_stuff(opt0, opt1="a", opt2="b", opt3="c"):
    print opt0, opt1, opt2, opt3

if __name__ == "__main__":
    parser = OptionParser()
    args, varargs, varkw, defaults = inspect.getargspec(do_stuff)
    if varargs or varkw:
      sys.exit("Sorry, can't make opts from a function with *a and/or **k!")
    lend = len(defaults)
    nodef = args[:-lend]
    for a in nodef:
      parser.add_option("--%s" % a)
    for a, d in zip(args[-lend:], defaults):
      parser.add_option("--%s" % a, default=d)

    options, args = parser.parse_args()
    d = vars(options)
    for n, v in zip(nodef, args):
      d[n] = v

    do_stuff(**d)

关于Python optparse 默认值与函数默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1512242/

相关文章:

c - 编写函数原型(prototype)的明智方法

c++ - 消除 C++ 代码中的重复?

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

python - 如何使用在运行时更改的 python 命令行参数?

python - 模块未找到错误 : No module named 'BaseHTTPServer'

Python - 正则表达式从 snmp walk 输出中提取 IP 和掩码

design-patterns - 不要重复自己的通勤属性

python - 如何: fit_generator in keras

python - 绘制半透明线/16 位 alpha 值

python - 无法使用 Optparse 将参数传递给 python