Creating a shell command line application with Python and Click

前端 未结 4 1153
野的像风
野的像风 2021-02-06 00:48

I\'m using click (http://click.pocoo.org/3/) to create a command line application, but I don\'t know how to create a shell for this application.
Suppose I\'m writing a progr

4条回答
  •  别那么骄傲
    2021-02-06 00:58

    I know this is super old, but I've been working on fpbhb's solution to support options as well. I'm sure this could use some more work, but here is a basic example of how it could be done:

    import click
    import cmd
    import sys
    
    from click import BaseCommand, UsageError
    
    
    class REPL(cmd.Cmd):
        def __init__(self, ctx):
            cmd.Cmd.__init__(self)
            self.ctx = ctx
    
        def default(self, line):
            subcommand = line.split()[0]
            args = line.split()[1:]
    
            subcommand = cli.commands.get(subcommand)
            if subcommand:
                try:
                    subcommand.parse_args(self.ctx, args)
                    self.ctx.forward(subcommand)
                except UsageError as e:
                    print(e.format_message())
            else:
                return cmd.Cmd.default(self, line)
    
    
    @click.group(invoke_without_command=True)
    @click.pass_context
    def cli(ctx):
        if ctx.invoked_subcommand is None:
            repl = REPL(ctx)
            repl.cmdloop()
    
    
    @cli.command()
    @click.option('--foo', required=True)
    def a(foo):
        print("a")
        print(foo)
        return 'banana'
    
    
    @cli.command()
    @click.option('--foo', required=True)
    def b(foo):
        print("b")
        print(foo)
    
    if __name__ == "__main__":
        cli()
    

提交回复
热议问题