pexpect不能传递超过1024个字符的输入?

2024-05-23 18:37:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我当前正在使用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().

当输入小于1024个字符时,pexpect.超时“p.readline()出错。在

我尝试过将输入拆分为小于1024个字符的片段,但存在相同的问题:

^{pr2}$

有人知道如何让pexpect在1024个字符以上的输入下工作吗?我试着看了看来源,但它好像在打电话操作系统写入(...). 在

(作为补充说明,我注意到当我从shell运行“cat”并尝试使用“Cmd+V”粘贴>;=1024个字符时,也会发生相同的截断错误。但是,如果我运行“pbpaste | cat”,一切都会正常工作。)

谢谢!在

更新: 呼吁操作系统写入()”返回1025,表示写入成功,但是操作系统读取()返回“\x07”(单字符BEL),然后挂起下一个调用,导致超时。在

划分操作系统写入()调用两个sub-1024字节的write(),并通过调用操作系统同步(),不会更改任何内容。在


Tags: the代码falseinputreadlinelen进程timeout
2条回答

我意识到现在已经很晚了,但是我发布了一个解决方案,给那些在这个问题上遇到同样问题的人(就像我今天早些时候做的那样)。在

基于一些答案/注释,我编写了一个类似pexpect的包,它使用标准写入以及标准读而不是pexpect使用的任何东西。我没有机会测试它会非常彻底,但到目前为止,它已经经受住了挑战。在

您可以在这里找到代码:https://github.com/tayyabt/tprocess

您的问题似乎与MacOS有关,请查看MacOSX 10.6.7 cuts off stdin at 1024 chars。在

它基本上说1024是tty缓冲区限制。在

我不是Mac OS的专家,但也许其他人可以给你更多的信息。在

相关问题 更多 >