2015-05-11 55 views
7

我们如何读取一个文件(非阻塞)到stdout并打印到标准输出(仍然非阻塞)?这是我能想到的最为神秘的方式,但它让你感觉必须有更好的方式。暴露某些LineReceiver的东西 - 比如逐行修改 - 功能将更加优选。读取文件,扭曲

from twisted.internet import stdio, protocol 
from twisted.protocols.basic import FileSender 
from twisted.internet import reactor 

class FileReader(protocol.Protocol): 
    def connectionMade(self): 
     fl = open('myflie.txt', 'rb') 
     d = FileSender().beginFileTransfer(fl, self.transport) 
     d.addBoth(fl.close) 
     d.addBoth(lambda _: reactor.stop()) 

stdio.StandardIO(FileReader()) 
reactor.run() 
+0

我不知道在[扭曲](https://pypi.python.org/pypi/twisted)更好的方式 - 但这里是它是如何在[线路]完成(HTTPS://pypi.python .ORG /的PyPI /电路) - [cat.py](https://github.com/circuits/circuits/blob/master/examples/cat.py) –

回答

3

这是扭曲的弱点。异步文件I/O很难完成,可能无法做到“正确”。有一张票已开放很长时间:https://twistedmatrix.com/trac/ticket/3983您可能会发现一个有用的地方继续讨论。

您使用成语肯定是最接近纠正我们目前提供。

+1

由于@Glyph。非常尊重Twisted。精彩而辛勤的工作。 – neverlastn