Итак, я пытаюсь использовать pexpect для вывода некоторых результатов и получаю странные результаты.
Для тестирования у меня есть этот скрипт, который просто печатает некоторые вещи, на которые я должен рассчитывать:
#!/usr/bin/env python3
for _ in range(4):
print('test')
print('<<<canary>>>')
for _ in range(4):
print('other stuff')
print('<<<end>>>')
Затем я пытаюсь ожидать этого в сеансе i python. Однако, похоже, он его вообще не видит:
In [1]: import pexpect
In [2]: s = pexpect.spawn('./spawn_test.py', logfile=open('outfile.log', 'wb'))
In [3]: s.expect('<<<canary>>>')
---------------------------------------------------------------------------
EOF Traceback (most recent call last)
EOF: End Of File (EOF). Empty string style platform.
In [4]: s.before
Out[4]: b''
In [5]: s.buffer
Out[5]: b''
Нет вывода вообще. Однако, если я просто увеличу диапазон в исходном скрипте (скажем, до 40000 вместо 4), то он будет работать нормально:
#!/usr/bin/env python3
for _ in range(40000):
print('test')
print('<<<canary>>>')
for _ in range(40000):
print('other stuff')
print('<<<end>>>')
затем
In [1]: import pexpect
In [2]: s = pexpect.spawn('./spawn_test.py', logfile=open('outfile.log', 'wb'))
In [3]: s.expect('<<<canary>>>')
Out[3]: 0 (0x0)
In [4]: s.expect('<<<end>>>')
Out[4]: 0 (0x0)
Странная вещь в том, что хотя он работает во втором случае (что доказывает, что в целом метод работает), в первом случае вывод сценария вообще отсутствует - я полностью вошел в функцию до os.read ( self.fileno), и ничего не вернулось. Что не имеет никакого смысла, поэтому я чувствую, что что-то упустил. Кроме того, s.terminated
изменяется с False
на True
после ожидаемого значения, которое выбрасывает EOF; read()
и readline()
также не возвращают вывод в первом случае, но работают нормально во втором случае.
Это на OSX, python 3.7.