Исключение в pexpect - PullRequest
       13

Исключение в pexpect

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

Я пишу Python скрипт , который будет взаимодействовать с другой программой при вводе / выводе с использованием библиотеки pexpect. Как только фаза ввода закончится, дочерний процесс выполнит много задач и напечатает на выходе все необходимые шаги. Я хочу, чтобы родительский процесс печатал вывод также шаг за шагом, поэтому я реализовал следующее, пока l oop:

while True:
    child.expect(".*\r\n", timeout=120)
    print(child.after.decode('ascii'))

Все работает довольно хорошо до конца, где я получаю следующую ошибку:

Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/pexpect/spawnbase.py", line 166, in read_nonblocking
    s = os.read(self.child_fd, size)
OSError: [Errno 5] Input/output error

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/pexpect/expect.py", line 111, in expect_loop
    incoming = spawn.read_nonblocking(spawn.maxread, timeout)
  File "/usr/lib/python3/dist-packages/pexpect/pty_spawn.py", line 485, in read_nonblocking
    return super(spawn, self).read_nonblocking(size)
  File "/usr/lib/python3/dist-packages/pexpect/spawnbase.py", line 171, in read_nonblocking
    raise EOF('End Of File (EOF). Exception style platform.')
pexpect.exceptions.EOF: End Of File (EOF). Exception style platform.

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "prog2wrapper.py", line 40, in <module>
    child.expect(".*\r\n", timeout=120)
  File "/usr/lib/python3/dist-packages/pexpect/spawnbase.py", line 341, in expect
    timeout, searchwindowsize, async_)
  File "/usr/lib/python3/dist-packages/pexpect/spawnbase.py", line 369, in expect_list
    return exp.expect_loop(timeout)
  File "/usr/lib/python3/dist-packages/pexpect/expect.py", line 117, in expect_loop
    return self.eof(e)
  File "/usr/lib/python3/dist-packages/pexpect/expect.py", line 63, in eof
    raise EOF(msg)
pexpect.exceptions.EOF: End Of File (EOF). Exception style platform.
<pexpect.pty_spawn.spawn object at 0x7eff2d01abd0>
command: /usr/bin/python3
args: ['/usr/bin/python3', '/home/robb/Workspace/prog1.py']
buffer (last 100 chars): b''

after: <class 'pexpect.exceptions.EOF'>
match: None
match_index: None
exitstatus: None
flag_eof: True
pid: 15380
child_fd: 5
closed: False
timeout: 30
delimiter: <class 'pexpect.exceptions.EOF'>
logfile: None
logfile_read: None
logfile_send: None
maxread: 2000
ignorecase: False
searchwindowsize: None
delaybeforesend: 0.05
delayafterclose: 0.1
delayafterterminate: 0.1
searcher: searcher_re:
    0: re.compile(b'.*\r\n')

Почему я получаю это? Может быть, это из-за того, что я где-то пропускаю child.close()

...