Twisted Conch Shell: блокировка исполняемого файла

У меня есть работающий сервер SSH Shell, и я пытаюсь создать команду (класс команд), которая действует как "ping", распечатывая некоторые данные каждые несколько секунд.

Оболочка ищет исполняемые файлы для принятых команд, создает их с заданными аргументами и запускает их:

def lineReceived(self, lines):
    ...
    self.resume(None)

def run_cmd_stack(self):
    cmd = self.cmd_stack.pop()
    exe = self.get_executable(cmd)
    exe.run()

def resume(self, ret):
    """Used by Executables to signal their completion
    """
    self.RET = ret
    if len(self.cmd_stack) > 0:
        self.run_cmd_stack()
    else:
        self.showPrompt()

Этот код работает, но он кажется неправильным:

class Executable(object):
    def __init__(self, shell_protocol, cmd, reactor):
        self.shell = shell_protocol
        self.reactor = reactor

    def end(self, ret):
        self.shell.resume(ret)


class exe_wait(Executable):
    name = 'wait'

    def run(self):
        i = int(self.args[0])
        self.loopy(i)
        return 0

    def loopy(self, i):
        d = defer.Deferred()
        if i > 0:
            self.shell.writeln("waiting...")
            d.addCallback(self.loopy)
            self.reactor.callLater(1, d.callback, i-1)
        else:
            d.addCallback(self.end)
            d.callback(0)
  1. Мне не особенно нравится передавать реактор в качестве аргумента, просто чтобы я мог проверить его пробным путем, но я не мог понять, как впрыскивать его только для тестирования.
  2. Я чувствую, что вызов исполняемого файла для метода "resume()" является уродливым, и я должен иметь возможность получить exe просто "return 0", когда все будет сделано. Проблема, с которой я столкнулся, заключается в том, что оболочка просто запускается и печатает подсказку вместо ожидания отложенного.

Из всех методов, которые я попробовал, это единственный, который я могу заставить работать должным образом, поэтому я очень ценю любой совет, который могу получить.

0 ответов

Другие вопросы по тегам