cmd.Cmd对象不返回任何值

时间:2014-06-14 23:08:13

标签: python python-cmd

我目前正在使用Python的cmd模块创建基于命令的游戏。

在某个时刻,我的cmd.Cmd个对象会嵌套。如果我说我正在运行命令提示符A,则在某个时间点B内会创建一个新提示A。我希望,当B完成后,再次将某个值返回A。我的所有试验刚刚结束,内部命令提示返回None。为了更好地理解这种情况,我尝试简化问题,并尝试从cmd.Cmd对象获取返回值。这就是我所拥有的:

import cmd
class Test(cmd.Cmd):
    def __init__(self, value):
        cmd.Cmd.__init__(self)
        self.value = value
    def do_bye(self, s):
        return True
    def postloop(self):
        print("Entered the postloop!")
        return self.value

然后在shell上我已经尝试过了:

a = Test("bla bla")
print(a.cmdloop())
# after the "bye" command it prints None

print(Test("bla bla").cmdloop())
# after the "bye" command it ALSO prints None

a = Test("safsfa").cmdloop()
print(a)
# Also prints None

我似乎无法使cmd.Cmd对象返回任何值。怎么能这样做,或者由于某些我不知道的原因它是不可能的?

1 个答案:

答案 0 :(得分:1)

在调用超类的cmdloop()版本后,您可以在子类中重新定义cmdloop()以返回特定值:

class Test(cmd.Cmd):
    # ...
    def cmdloop(self):
        cmd.Cmd.cmdloop(self)
        return self.value