2011-01-23 2 views
0

я выяснить, как использовать модуль Cmd предлагаемый в Python Lib, но я с бедой теперь ...Python Интерактивный Cmd Вопрос (3 Параметры задачи)

Вот код:

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" 

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

Так что это хорошо, чтобы вызвать несильно в командной строке, как «создать file.txt», но я не могу использовать этот ... «AddText file.txt SOMETEXT»

Я полагаю, что не признает там три разных поля?

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

Спасибо.

+0

Спасибо. Я меняю файл имен и удаляю == Истина. У меня все еще есть проблема в том, чтобы заставить его работать через командную строку .. он не распознает третий параметр. – PGZ

+0

Как вы называете этот код? – user225312

+1

этот вопрос неопровержимо. как мы должны знать, как эта функция вызывается и какое соединение она имеет для параметров командной строки? – SilentGhost

ответ

4

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

> foo This is my text 

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

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

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" 

Кроме того, увидеть этот wiki on CmdModule. В нем есть объяснение методов do_xxx.

+0

Это великолепно! Работа просто отлично! Большое спасибо! – PGZ

Смежные вопросы