我写了一个用于处理特定文件的库。该库包含许多可用作命令行脚本和管道结果的函数。
在我的图书馆中,我有一些功能:
def do_this(p1, p2=[]):
return "something"
def do_that(p1, p2, p3={}):
return "else"
shell
:
$ cat my_file > do_this -p1 doo -p2 be doo | do_that -p1 be -p2 doo -p3 key1=bee key2=bop
我可以为解析参数的每个函数编写一个脚本 - 使用argparse
,docopt
等。但是,我有几个函数可以转换成命令行脚本,我已经可以看到写入的冗余首先是函数,然后在调用函数之前解析参数。
所以我想知道在这种情况下可以使用哪种替代方案 - 如果有的话?是否有不同的,更有效的方法来编写Python库及其相关的命令行脚本?
我目前的想法可能很幼稚但我看到的东西会解析装饰/标记的功能。然后它将生成包含所有必需参数的命令行脚本。它可以基于函数的文档字符串。它让我想起了库docopt
,它需要约定并解析命令的doc字符串以生成参数解析器。
答案 0 :(得分:0)
在您的示例中使用cat
时,我假设您使用的是Linux或其他类Unix系统。一种常见的方法是有几个链接到你的python脚本,每个函数一个。然后在脚本中,您解析一次参数,并根据sys.argv[0]
的值调用正确的函数。
...
if __name__ == '__main__':
parser = argparse.ArgumentParser(description='...')
...
cmd = os.path.basename(sys.argv[0])
args = parser.parse_args()
if cmd == 'cmd1':
cmd1(args)
elif cmd == 'cmd2':
cmd2(args)
...
该脚本将与cmd1
,cmd2
,...