pythonconsole-application

Python Interactive Shell Type Application


I want to create an interactive shell type application. For example:

> ./app.py

Enter a command to do something. eg `create name price`. 
For to get help, enter "help" (without quotes)

> create item1 10
Created "item1", cost $10

> del item1
Deleted item1

> exit 
...

I could of course use an infinte loop getting user input, splitting the line to get the individual parts of the command, but is there a better way? Even in PHP (Symfony 2 Console) they allow you to create console commands to help setup web applications for example. Is there something like that in Python? (I am using Python 3)


Solution

  • Just input the commands in a loop.

    For parsing the input, shlex.split is a nice option. Or just go with plain str.split.

    import readline
    import shlex
    
    print('Enter a command to do something, e.g. `create name price`.')
    print('To get help, enter `help`.')
    
    while True:
        cmd, *args = shlex.split(input('> '))
    
        if cmd=='exit':
            break
    
        elif cmd=='help':
            print('...')
    
        elif cmd=='create':
            name, cost = args
            cost = int(cost)
            # ...
            print('Created "{}", cost ${}'.format(name, cost))
    
        # ...
    
        else:
            print('Unknown command: {}'.format(cmd))
    

    The readline library adds history functionality (up arrow) and more. Python interactive shell uses it.