Readline de Python desde pipe en Linux

Al crear una tubería con os.pipe() , devuelve 2 números de archivo; un final de lectura y un final de escritura que se pueden escribir y leer de forma con os.write() / os.read() ; no hay os.readline (). ¿Es posible utilizar readline?

 import os readEnd, writeEnd = os.pipe() # something somewhere writes to the pipe firstLine = readEnd.readline() #doesn't work; os.pipe returns just fd numbers 

En resumen, ¿es posible usar readline cuando todo lo que tiene es el número de identificador de archivo?

Puede usar os.fdopen() para obtener un objeto similar a un archivo desde un descriptor de archivo.

 import os readEnd, writeEnd = os.pipe() readFile = os.fdopen(readEnd) firstLine = readFile.readline() 

Pase el conducto de os.pipe() a os.fdopen() , que debe construir un objeto de archivo desde el descriptor de archivos.

Parece que desea tomar un descriptor de archivo (número) y convertirlo en un objeto de archivo. La función fdopen debería hacer eso:

 import os readEnd, writeEnd = os.pipe() readFile = os.fdopen(readEnd) # something somewhere writes to the pipe firstLine = readFile.readline() 

No puedo probar esto ahora mismo, así que avísame si no funciona.

os.pipe() devuelve los descriptores de archivos, por lo que tiene que envolverlos así:

 readF = os.fdopen(readEnd) line = readF.readline() 

Para obtener más detalles, consulte http://docs.python.org/library/os.html#os.fdopen

Sé que esta es una pregunta antigua, pero aquí hay una versión que no hace un punto muerto.

 import os, threading def Writer(pipe, data): pipe.write(data) pipe.flush() readEnd, writeEnd = os.pipe() readFile = os.fdopen(readEnd) writeFile = os.fdopen(writeEnd, "w") thread = threading.Thread(target=Writer, args=(writeFile,"one line\n")) thread.start() firstLine = readFile.readline() print firstLine thread.join()