python终端是什么意思_从Python中的终端读取

在子进程中缓冲是一个常见的问题。这里有四种可能的方法。在

首先,也是最简单的,您可以一次从管道中读取一个字节。这就是我所说的“肮脏的黑客攻击”,它会带来性能损失,但很简单,它保证你的read()调用只会阻塞到第一个字节,而不是等待一个永远不会填满的缓冲区。但是,这并不会强制另一个进程刷新其写缓冲区,因此,如果这是问题所在,那么这种方法无论如何也帮不上忙。在

第二,我认为下一个最简单的方法是考虑使用Twisted框架,它有一个使用虚拟终端的工具,或者pty(我认为是伪电传打字机)来与您的子进程对话。但是,这可能会影响应用程序的设计(可能会更好,但无论如何,这可能不会对您有用)。http://twistedmatrix.com/documents/current/core/howto/process.html

如果以上两个选项都不适合您,那么您就只能自己解决棘手的I/O并发问题了。在

第三,尝试使用fcntl()和O\u NONBLOCK将管道(所有管道,fork()之前)设置为非阻塞模式。然后,您可以在尝试读/写之前使用select()来测试读/写就绪情况;但是您仍然必须捕获IOError并测试EAGAIN,因为即使在这种情况下也可能发生这种情况。根据子进程的行为,这可能允许您等到数据真正显示出来后再尝试读入它。在

最后的办法是自己实现PTY逻辑。如果您看到过对termio options、ioctl()调用等的引用,那么这就是您要面对的问题。我以前没有做过,因为这很复杂,我从来没有真正需要这样做。如果这是你的命运,祝你好运。在

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值