В настоящее время я передаю некоторый ввод в процесс с 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, все работает нормально, но для >= 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".)
Спасибо!
Update: Вызов "os.write()" возвращает 1025, что указывает на успешную запись, но os.read() возвращает "\ x07" (единственный символ BEL), а затем зависает при следующем вызове, что приводит к таймауту.
Разделение вызова os.write() на два байта write() s под-1024 байта, разделенных вызовом os.fsync(), ничего не меняет.