2015-05-11 13 views
7

Come si legge un file (non bloccante) e lo si stampa sullo standard output (ancora non bloccante)? Questo è il modo più esile che riesco a pensare, ma ti lascia con la sensazione che ci deve essere un modo migliore. Qualcosa che esponga alcune LineReceiver - come la modifica linea per linea - la funzionalità sarebbe ancora più preferita.Lettura del file sullo stdout con twistato

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

Non conosco un modo migliore in [Twisted] (https://pypi.python.org/pypi/twisted) - Ma ecco come è fatto in [circuiti] (https: //pypi.python .org/pypi/circuiti) - [cat.py] (https://github.com/circuits/circuits/blob/master/examples/cat.py) –

risposta

3

Questa è una debolezza di Twisted. L'I/O file asincrono è difficile da eseguire e potrebbe essere impossibile eseguire "correttamente". C'è un biglietto che è stato aperto per molto tempo: https://twistedmatrix.com/trac/ticket/3983 che potresti trovare utile per continuare questa discussione.

L'idioma che stai utilizzando è sicuramente il più vicino da correggere che offriamo attualmente.

+1

Grazie a @Glyph. Grande rispetto per Twisted. Un sacco di lavoro fantastico e duro. – neverlastn