Python Interactive Cmd Вопрос (проблема 3 параметров) - PullRequest
0 голосов
/ 23 января 2011

Я выяснил, как использовать модуль Cmd, предлагаемый в Python lib, но сейчас у меня проблема ...

Вот код:

def do_addtext(self, file, text = ""):
        "Add text to the end of a file"
        if os.path.exists(file) == True:
            f = open(file, 'a')
            f.write("\n" + text)
            print "\n>>> Text added!\n"
        else:
            print "\n>>> File do not exists\n"

Все отлично работает, когда я использую функции только двух параметров, но я не могу использовать его с тремя параметрами.

Так что нормально вызывать функцию в командной строке, например, "создать файл.txt", но я не могу использовать этот ... "addtext file.txt sometext"

Полагаю, он не распознает три разных поля?

Любая помощь в этом?

Спасибо.

1 Ответ

4 голосов
/ 23 января 2011

Когда объект Cmd анализирует ввод, он берет первое слово и использует его в качестве имени функции.Остальная часть текста передается как один параметр.Функции do_ * принимают только 2 параметра: self и остаток строки из ввода.Итак, если вы наберете:

> foo This is my text

В командной строке, то cmd попытается вызвать функцию self.do_foo («Это мой текст»).Он не разделит строку на аргументы-разделители для вас.То есть он не будет пытаться вызвать self.do_foo («This», «is», «my», «text»).

Если вы хотите, чтобы ваши функции обрабатывали больше аргументов, вы будетеНужно разобрать строку немного больше по своему усмотрению.Прямо сейчас у вас есть do_addtext, который принимает 3 параметра.Таким образом, вам придется переписать do_addtext, чтобы иметь только 2 параметра, например:

do_addtext(self, parameter):
  "Add text to end of file."
  filename,text = parameter.split(" ", 1)  # <--- this does the parsing you wanted Cmd to do
  if os.path.exists(filename) == True:
    f = open(filename, 'a')
    f.write("\n" + text)
    print "\n>>> Text added!\n"
  else:
    print "\n>>> File do not exists\n"

Также смотрите эту вики на CmdModule .В нем есть объяснение методов do_xxx.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...