pexpect не может передавать ввод более 1024 символов?

В настоящее время я передаю некоторые входные данные процессу с помощью 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() на две записи по 1024 байта, разделенные вызовом os.fsync(), ничего не меняет.

11
задан tba 11 February 2012 в 23:16
поделиться