How to make a command line interface or interpreter in Python

后端 未结 4 1114
清酒与你
清酒与你 2021-01-12 16:24

I have already developed class1.py, class2.py, etc. with functions implemented inside each class. e.g. Operator.py has add, minus, time, divide functions. How can I build a

相关标签:
4条回答
  • 2021-01-12 17:06

    I'm not sure what you're looking for: it seems you want to build an interactive shell, but you also mention optparse, which is designed to streamline the creation of a module interface that can be run from the system shell rather than providing a shell in itself.

    It looks like you do want your module to implement its own interactive shell, but maybe you also want to have some commands accessible from the command line, e.g. by calling your_script the_command --argument value --other-argument right from bash or what have you. This is the sort of thing that optparse is meant to provide, but it has been deprecated in favour of argparse. argparse is in the Python 2.7 standard library and can be installed in the standard way (e.g. as a dependency of your module, or by separate installation via PyPI, etc.) for older Pythons.

    argparse makes it relatively straightforward to link particular options or subcommands to entry points (i.e. function calls) in your code. The documentation is quite detailed, and is worth a thorough read if you're likely to want to make a few such interfaces. For advanced usage you can do some interesting stuff, and make your code a bit more manageable, by creating a custom action.

    0 讨论(0)
  • 2021-01-12 17:12

    Use the cmd module:

    • Reference : Custom (interactive) shell with Python

    Other packages

    You can also use various modules hosted at pypi that is built on top of cmd module

    • http://pypi.python.org/pypi/Custom%20Interactive%20Console/1.0
    0 讨论(0)
  • 2021-01-12 17:16

    I think what he's asking about is how to easily deal with optional arguments within the interactive shell, so when you use the program it will look something like this:

    $ myprogram
    (Cmd) addcd --track 3 --cdname thriller
    

    So running myprogram opens up its own command prompt, to which commands such as addcd can be issued, along with optional arguments, and then processed.

    The best way to do this, I think, would be to use argparse along with cmd. Instead of parsing sys.argv, the parse_args method can be passed a list of strings. So something like below:

    def do_addcd(self, line):
        parser = argparse.ArgumentParser(prog='addcd')
        parser.add_argument('--track', type=int)
        parser.add_argument('--cdname')
    
        args = parser.parse_args(line.split())
        newcd = CD(args.track, args.cdname)
    

    The problem with doing something like this, as I have found out myself by trying to do exactly this sort of thing, is that parse_args tends to exit the entire program if you supply it with the wrong number of arguments, among other errors. The desired behaviour in this use case would be to simply exit back to your custom interactive shell, but that won't be easy to do without either some hacky workaround or subclassing ArgumentParser and overriding parse_args.

    0 讨论(0)
  • 2021-01-12 17:17

    Derive from cmd.Cmd, overriding the various methods as necessary.

    0 讨论(0)
提交回复
热议问题