2015-05-11 13 views
7

Jak odczytać plik (bez blokowania) i wydrukować go na standardowe wyjście (nadal nieblokujące)? To jest najsympatyczniejszy sposób, w jaki mogę myśleć, ale pozostawia uczucie, że musi istnieć lepszy sposób. Coś eksponującego jakąś modyfikację LineReceiver - jak linia po linii - byłoby jeszcze bardziej korzystne.Czytanie pliku na stdout ze skręconą wersją

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

Nie znam lepszego sposobu w [Twisted] (https://pypi.python.org/pypi/twisted) - Ale oto jak to zrobić w [obwodach] (https: //pypi.python .org/pypi/circuits) - [cat.py] (https://github.com/circuits/circuits/blob/master/examples/cat.py) –

Odpowiedz

3

To słabość Twisted. Asynchroniczne operacje na plikach we/wy są trudne do zrobienia i może być niemożliwe wykonanie "dobrze". Jest bilet otwarty od dłuższego czasu: https://twistedmatrix.com/trac/ticket/3983, w którym możesz znaleźć przydatne miejsce do kontynuowania tej dyskusji.

Idiom, którego używasz, jest zdecydowanie najbliższy korekcie, którą obecnie oferujemy.

+1

Dzięki @Glyph. Wielki szacunek dla Twisted. Mnóstwo fantastycznej i ciężkiej pracy. – neverlastn