Унификация интерпретатора командной строки python и интерфейсов командной строки command-subcommand - PullRequest
0 голосов
/ 13 сентября 2010

У меня есть интерпретатор командной строки (или «интерпретатор команд, ориентированный на строки» в python docs для cmd модуля) для программы, в которую я хотел бы добавить служебный интерфейс командной строки.

Например, теперь сеанс выглядит следующим образом: (% для приглашения оболочки, :) - это мое настраиваемое приглашение)
% tasks (вызывает интерпретатор командной строки)
:) clockHours Teaching_Sara_to_coregister_T1_to_T2
:) exit

Кроме того, я хочу этот интерфейс:
% tasks clockHours Teaching_Sara_to_coregister_T1_to_T2

Я представляю команды интерпретатора, отображаемые на подкоманды в утилите командной строки.Существует ли библиотека для совместной работы?Было бы здорово, если бы вам не приходилось писать код завершения дважды, код структуры команды дважды и т. Д. Если нет, то какой-нибудь совет для меня, если я попытаюсь реализовать это поведение, или мысли о его полезности?

Очевидно, что я теряю преимущество простых временных переменных, поэтому я с самого начала использовал подход интерпретатора, но многие из моих пользовательских команд интерпретатора не полагаются на это поведение или могут быть легко изменены, чтобы не требовать его - это то, чтоподмножество, для которого я хочу использовать служебные подкоманды командной строки.

Ответы [ 2 ]

1 голос
/ 26 января 2012

Еще одна полезная вещь - это модуль cmdln .

1 голос
/ 11 января 2011

cmd модуля может быть достаточно для того, что вы хотите, если я правильно понимаю вашу проблему.

Ваше окончательное решение может быть близко к приведенному ниже примеру:

import cmd
import sys

class MyCmd(cmd.Cmd):
    def do_hello(self, line):
        print "hello"
    def do_exit(self, line):
        return True

if __name__ == '__main__':
    my_cmd = MyCmd()

    if len(sys.argv) > 1:
        my_cmd.onecmd(' '.join(sys.argv[1:]))
    else:
        my_cmd.cmdloop()

дает такое поведение:

C:\_work\home>jython cmdsample.py hello
hello

C:\_work\home>jython cmdsample.py
(Cmd) hello
hello
(Cmd) exit

C:\_work\home>
...