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