В настоящее время я передаю некоторый ввод в процесс с pexpect со следующим кодом:
p = pexpect.spawn('cat', timeout=5.0 )
p.maxread = 5000
p.setecho(False) # prevent the process from echoing stdin back to us
INPUT_LEN = 1024
p.sendline('a'*INPUT_LEN)
print p.readline() # pexpect.TIMEOUT: Timeout exceeded in read_nonblocking().
Когда INPUT_LEN <1024, все работает нормально, но <strong>для> = 1024 символов, процессне получает полный ввод , что вызывает ошибку "pexpect.TIMEOUT" для p.readline ().
Я попытался разбить свой ввод на части размером менее 1024 символов, но это имеетта же проблема:
p = pexpect.spawn('cat', timeout=5.0 )
p.maxread = 5000
p.setecho(False)
INPUT_LEN = 1024
p.send('a'*1000)
p.sendline('a'*(INPUT_LEN-1000))
print p.readline() # pexpect.TIMEOUT: Timeout exceeded in read_nonblocking().
Кто-нибудь знает, как заставить pexpect работать с вводами более 1024 символов?Я попытался посмотреть на источник, но кажется, что он вызывает os.write (...).
(В качестве примечания, я заметил, что такая же ошибка усечения возникает при запуске «cat»из оболочки и попытайтесь вставить> = 1024 символа с помощью «Cmd + V». Однако все работает нормально, если я запускаю «pbpaste | cat».)
Спасибо!
Обновление: Вызов "os.write ()" возвращает 1025, что указывает на успешную запись, но os.read () возвращает "\ x07" (односимвольный BEL), а затем зависает при следующем вызове,что приводит к тайм-ауту.
Разделение вызова os.write () на два байта write () с байтами по 1024, разделенных вызовом os.fsync (), ничего не меняет.