Actualmente estoy pasando una cierta entrada a un proceso con pexpect con el siguiente código:pexpect no puede pasar entrada más de 1024 caracteres?
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().
Cuando INPUT_LEN < 1024, todo funciona bien, pero de> = 1024 caracteres, el proceso no recibe la plena entrada, lo que provoca la aparición de un error "pexpect.TIMEOUT" en p.readline().
He intentado dividir mi entrada en pedazos más pequeños de 1.024 caracteres, pero esto tiene el mismo problema:
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().
¿Alguien sabe cómo hacer el trabajo pexpect con entradas de más de 1024 caracteres? Traté de ver la fuente, pero parece que está llamando a os.write (...).
(Como nota al margen, he notado que se produce el mismo error de truncamiento cuando ejecuto "cat" desde un shell e intento pegar> = 1024 caracteres con "Cmd + V". Sin embargo, todo funciona bien si corro "pbpaste | cat")
Gracias.!
Actualización: el llamado a "os.write()" devuelve 1025, lo que indica una escritura con éxito, pero os.read() devuelve "\ x07" (el único personaje BEL), y luego se cuelga en la próxima llamada, lo que resulta en el tiempo de espera.
Dividir la llamada os.write() en dos sub-1024 byte write() s, separados por una llamada a os.fsync(), no cambia nada.
'pexpect.spawn' debe tener una palabra clave' maxdata', por defecto, a '2000', así que probablemente esto suele aplicarse a su caso, pero ¿ha tratado aumentarla ? –
Desafortunadamente eso no funcionó; ver la última edición – tba
Disculpe la confusión, escribí maxdata pero quise decir 'maxread', bueno, valió la pena intentarlo, supongo. –