Имитация CLI Shell с питоном

Меня попросили смоделировать CLI с Python.

Это то что я сделал

def somefunction(a,b):
    //codes here
//consider some other functions too

print "--- StackOverFlow Shell ---"
while True:
    user_input = raw_input("#> ")
    splitit = user_input.split(" ")
    if splitit[0] == "add":
        firstNum = splitit[1]
        sNum = splitit[2]
        result = somefunction(firstNum, sNum)
        print result
    //consider some other elif blocks with "sub", "div", etc
    else:
        print "Invalid Command"

Я также проверяю длину списка, здесь "splitit" я разрешаю только 3 аргументам, первый будет операцией, а второй и третий аргументы, с которыми должны выполняться некоторые функции, если аргумент больше чем 3, для этого я ставлю чек.

Хотя каким-то образом мне удается заставить его работать, но есть ли лучший способ добиться того же?

2 ответа

Решение

Использовать питон CMD Модуль:

Проверьте несколько примеров, приведенных на следующих страницах

http://docs.python.org/library/cmd.html # Поддержка интерпретаторов команд, ориентированных на строки

http://www.doughellmann.com/PyMOTW/cmd - # Создание линейно-ориентированных командных процессоров

prompt можно задать строку, которая будет печататься каждый раз, когда у пользователя запрашивается новая команда.

intro это приветственное сообщение, напечатанное в начале программы.

например:

import cmd

class HelloWorld(cmd.Cmd):
    """Simple command processor example."""

    prompt = 'prompt: '
    intro = "Simple command processor example."

Вы должны проверить VTE lib:

http://earobinson.wordpress.com/2007/09/10/python-vteterminal-example/

Он работает очень хорошо, и вы можете очень легко настроить его внешний вид. Вот как это просто:

    # make terminal
    terminal = vte.Terminal()
    terminal.connect ("child-exited", lambda term: gtk.main_quit())
    terminal.fork_command()

    # put the terminal in a scrollable window
    terminal_window = gtk.ScrolledWindow()
    terminal_window.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
    terminal_window.add(terminal)
Другие вопросы по тегам