Объект cmd.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

А то на оболочке я уже пробовал:

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 ответ

Решение

Вы можете переопределить cmdloop() в вашем подклассе, чтобы вернуть определенное значение, после вызова версии суперкласса cmdloop():

class Test(cmd.Cmd):
    # ...
    def cmdloop(self):
        cmd.Cmd.cmdloop(self)
        return self.value
Другие вопросы по тегам