Python交互式Cmd问题(3个参数问题)

Python交互式Cmd问题(3个参数问题),python,command-line-interface,Python,Command Line Interface,我确实弄明白了如何使用Python库中提供的Cmd模块,但我现在遇到了一个问题 代码如下: 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 "

我确实弄明白了如何使用Python库中提供的Cmd模块,但我现在遇到了一个问题

代码如下:

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"
当我只使用两个参数的函数时,它工作得很好,但我不能使用三个参数

因此,在命令行上调用诸如“create file.txt”之类的函数是可以的,但我不能使用这个函数。。。“addtext file.txt sometext”

我想它不承认有三个不同的领域

有什么帮助吗


谢谢。

当Cmd对象解析输入时,它使用第一个单词作为函数名。文本的其余部分作为单个参数传入。do_*函数只接受两个参数:self和输入字符串的其余部分。因此,如果您键入:

> foo This is my text
在提示符下,cmd将尝试调用函数self.do\u foo(“这是我的文本”)。它不会将字符串拆分为分隔符参数。也就是说,它不会尝试调用self.do_foo(“This”、“is”、“my”、“text”)

如果希望函数处理更多的参数,则需要自己进一步解析该行。现在,您必须使用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"
do_addtext(自身,参数):
“将文本添加到文件末尾。”

filename,text=parameter.split(“,1)#当Cmd对象解析输入时,它将第一个单词作为函数名。文本的其余部分作为单个参数传入。do_*函数只接受两个参数:self和输入字符串的其余部分。因此,如果您键入:

> foo This is my text
在提示符下,cmd将尝试调用函数self.do\u foo(“这是我的文本”)。它不会将字符串拆分为分隔符参数。也就是说,它不会尝试调用self.do_foo(“This”、“is”、“my”、“text”)

如果希望函数处理更多的参数,则需要自己进一步解析该行。现在,您必须使用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"
do_addtext(自身,参数):
“将文本添加到文件末尾。”

filename,text=parameter.split(“,1)#谢谢。我更改了文件名并删除了==True。在通过命令行使其工作时,我仍然有一个问题。。它无法识别第三个参数。您如何调用此代码?这个问题无法回答。我们怎么知道这个函数是如何调用的,它与命令行参数有什么联系?谢谢。我更改了文件名并删除了==True。在通过命令行使其工作时,我仍然有一个问题。。它无法识别第三个参数。您如何调用此代码?这个问题无法回答。我们怎么知道这个函数是如何调用的,它与命令行参数有什么联系?太棒了!工作做得很好!非常感谢你!太棒了!工作做得很好!非常感谢你!