Pexpect - чтение из постоянно выводимой оболочки - PullRequest
0 голосов
/ 17 февраля 2020

Я пытаюсь заставить pexpect начать выполнение команды, которая в основном непрерывно выводит некоторую информацию каждые несколько миллисекунд, пока не будет отменена с помощью Ctrl + C.

Я попытался заставить pexpect войти в файл, хотя эти выходы просто игнорируются и никогда не регистрируются.

child = pexpect.spawn(command)
child.logfile = open('mylogfile.txt', 'w')

Это приводит к тому, что команда регистрируется с пустым выводом.

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

child = pexpect.spawn(command)
child.logfile = open('mylogfile.txt', 'w')
time.sleep(5)
child.send('\003')
child.expect('$')

Это данные, о которых идет речь:

image показ данных, постоянно печатающих на терминал

Я попытался описать решение, описанное здесь: Анализ вывода pexpect , хотя у меня это не сработало и привело к тайм-ауту.

1 Ответ

0 голосов
/ 17 февраля 2020

Удалось заставить его работать, используя для этого подпроцесс Python, но я не был уверен, как это сделать с Pexpect, но я получил то, что я описал.

def echo(self, n_lines):
    output = []
    if self.running is False:
        # start shell
        self.current_shell = Popen(cmd, stdout=PIPE, shell=True)
        self.running = True

        i = 0
        # Read the lines from stdout, break after reading the desired amount of lines.
        for line in iter(self.current_shell.stdout.readline, ''):
            output.append(line[0:].decode('utf-8').strip())
            if i == n_lines:
                break
            i += 1
    return output
...