我目前正在使用以下代码将一些输入传递给具有 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 个字符,该过程不会收到完整的输入,导致在 p.readline() 上引发“pexpect.TIMEOUT”错误。
我尝试将输入拆分为小于 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(...)。
(附带说明一下,当我从 shell 运行“cat”并尝试使用“Cmd+V”粘贴 >=1024 个字符时,我注意到同样的截断错误。但是,如果我运行“pbpaste”,一切正常| 猫”。)
谢谢!
更新: 调用“os.write()”返回1025,表示写入成功,但是os.read()返回“\x07”(单字符BEL),然后在下一次调用时挂起,导致超时.
将 os.write() 调用分成两个 1024 字节以下的 write(),由调用 os.fsync() 分隔,不会改变任何内容。