从函数生成shell命令

时间:2016-10-04 06:40:37

标签: python function parsing command-line

我写了一个用于处理特定文件的库。该库包含许多可用作命令行脚本和管道结果的函数。

在我的图书馆中,我有一些功能:

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 

我可以为解析参数的每个函数编写一个脚本 - 使用argparsedocopt等。但是,我有几个函数可以转换成命令行脚本,我已经可以看到写入的冗余首先是函数,然后在调用函数之前解析参数。

所以我想知道在这种情况下可以使用哪种替代方案 - 如果有的话?是否有不同的,更有效的方法来编写Python库及其相关的命令行脚本?

我目前的想法可能很幼稚但我看到的东西会解析装饰/标记的功能。然后它将生成包含所有必需参数的命令行脚本。它可以基于函数的文档字符串。它让我想起了库docopt,它需要约定并解析命令的doc字符串以生成参数解析器。

1 个答案:

答案 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)
    ...

该脚本将与cmd1cmd2,...

相关联