2011-01-23 64 views
0

我没弄清楚如何使用Python中的lib提供的Cmd的模块,但我现在有麻烦......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

谢谢。我更改名称文件并删除了== True。我通过命令行工作仍然存在问题..它不能识别第三个参数。 – PGZ 2011-01-23 19:32:10

+0

你是怎么调用这段代码的? – user225312 2011-01-23 19:33:07

回答

4

当Cmd对象解析输入时,它取第一个单词并将其用作函数名称。文本的其余部分作为单个参数传入。 do_ *函数只需要2个参数:self和来自输入的字符串的其余部分。所以,如果你键入:

> foo This is my text 

在提示符下,然后CMD将尝试调用一个函数self.do_foo(“这是我的文本”)。它不会将字符串拆分为分隔符参数。也就是说,它不会尝试调用self.do_foo(“This”,“is”,“my”,“text”)。

如果你想让你的函数处理更多的参数,你需要自己分析一下这一行。现在,你有3个参数do_addtext。所以,你将不得不重新编写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" 

而且,看到这个wiki on CmdModule。它有对do_xxx方法的解释。