【问题标题】:Python magical main() signature like Perl 6Python 神奇的 main() 签名,如 Perl 6
【发布时间】:2010-10-04 20:16:54
【问题描述】:

python 是否有任何方法可以轻松快速地制作 CLI 实用程序而无需大量参数解析样板?

在 Perl 6 中,MAINautomagically parses command line arguments. 的签名

有没有什么方法可以在没有大量样板的情况下在 Python 中做类似的事情?如果没有,最好的方法是什么?我正在考虑一个函数装饰器,它将执行一些内省并做正确的事情。如果没有什么已经喜欢它,我在想像我下面的东西。这是个好主意吗?

@MagicMain
def main(one, two=None, *args, **kwargs):
    print one # Either --one or first non-dash argument
    print two # Optional --arg with default value (None)
    print args # Any other non-dash arguments
    print kwargs # Any other --arguments

if __name__ == '__main__':
    main(sys.argv)

【问题讨论】:

  • MAIN sub 比博文显示的要强大。例如,您可以拥有多个采用不同参数的MAIN 子例程。请参阅Synopsis 06 了解更多信息。

标签: python command-line-arguments raku magic-methods method-signature


【解决方案1】:

Baker 库包含一些方便的装饰器,可以“自动”从方法签名创建 arg 解析器。

例如:

@baker.command
def test(start, end=None, sortby="time"):
  print "start=", start, "end=", end, "sort=", sortby

$ script.py --sortby name 1
start= 1 end= sortby= name

【讨论】:

  • 这和我想象的差不多。我会调查一下,然后给你留下一个绿色饼干 :)
【解决方案2】:

我不太确定您认为什么是解析样板文件。 “当前”的方法是使用argparse 系统进行python。旧系统是getopt

【讨论】:

  • argparse 似乎在我描述的装饰器的引擎盖下可能会很好......它可以删除所有parser.add_argument 样板。
【解决方案3】:

Simon Willison 的 optfunc 模块试图提供您正在寻找的功能。

【讨论】:

    【解决方案4】:

    opterator 模块处理这个问题。

    https://github.com/buchuki/opterator

    【讨论】:

      【解决方案5】:

      Python 有 getopts 模块来执行此操作。

      【讨论】:

        【解决方案6】:

        最近我遇到了begins 项目,用于装饰和简化命令行处理。

        它似乎提供了许多您正在寻找的相同功能。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-11-22
          • 2019-11-07
          • 2014-10-21
          • 1970-01-01
          • 1970-01-01
          • 2019-05-13
          • 1970-01-01
          相关资源
          最近更新 更多