Python 中类似 Perl 6 的神奇 main() 签名

3 投票
6 回答
956 浏览
提问于 2025-04-16 04:59

Python有没有简单快捷的方法来制作命令行工具,而不需要写很多解析参数的繁琐代码呢?

在Perl 6中,MAIN这个函数的签名可以自动解析命令行参数。

在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)

6 个回答

2

我不太确定你所说的“解析样板”指的是什么。现在常用的方法是使用 argparse 这个系统来处理Python中的参数。之前的旧方法是 getopt

2

Simon Willison的optfunc模块试图提供你所需要的功能。

5

Baker库里有一些很方便的装饰器,可以根据方法的签名“自动”创建参数解析器。

举个例子:

@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

撰写回答