pexpect无法通过1024个字符传递输入?

tba*_*tba 11 python io macos expect pexpect

我正在使用以下代码将一些输入传递给具有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().
Run Code Online (Sandbox Code Playgroud)

当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().
Run Code Online (Sandbox Code Playgroud)

有谁知道如何使用超过1024个字符的输入使pexpect工作?我试着查看源代码,但它似乎只是在调用os.write(...).

(作为旁注,我注意到当我从shell运行"cat"并尝试使用"Cmd + V"粘贴> = 1024个字符时发生相同的截断错误.但是,如果我运行"pbpaste,一切正常|猫".)

谢谢!

更新: 对"os.write()"的调用返回1025,表示写入成功,但os.read()返回"\ x07"(单个字符BEL),然后在下一次调用时挂起,导致超时.

将os.write()调用分为两个1024字节的write(),由os.fsync()调用分隔,不会改变任何东西.

Rik*_*ggi 5

您的问题似乎与MacOS有关,请看看MacOSX 10.6.7在1024个字符处切断stdin.

它基本上说1024是你的tty缓冲区限制.

我不是Mac OS的专家,但也许其他人可以为您提供更多有关此问题的信息.