Lee un archivo de la entrada estándar redirigida con python

Estoy tratando de leer el contenido de un archivo de texto que fue redirigido stdin a través de la línea de comandos, y enviarlo por Internet cuando el receptor tiene que volver a ensamblarlo a su forma original.

Por ejemplo:

$ python test.py < file.txt 

He intentado leer el archivo y volver a ensamblarlo con el siguiente código inspirado en el enlace :

 for line in sys.stdin: stripped = line.strip() if not stripped: break result = result + stripped print "File is beeing copied" file = open("testResult.txt", "w") file.write(result) file.close() print "File copying is complete!" 

Pero esta solución funciona siempre y cuando NO tenga una fila vacía (dos ‘\ n’ una detrás de otra) en mi archivo, si lo tengo, mi bucle se interrumpe y la lectura del archivo finaliza. ¿Cómo puedo leer desde stdin hasta Llego a del archivo que fue redirigido?

¿Por qué estás mirando los datos?

 result = sys.stdin.read() 

En lugar de romper, solo desea continue a la siguiente línea. El iterador se detendrá automáticamente cuando llegue al final del archivo.

 import sys result = "" for line in sys.stdin: stripped = line.strip() if not stripped: continue result += stripped 

line.strip() está eliminando la nueva línea final de la línea de lectura.

Si quieres esa nueva línea, entonces no deberías hacer eso que no creo (¿tu archivo de salida tiene las nuevas líneas de entrada)?

Que if stripped bit if stripped está buscando una línea en blanco y era, en el original, la característica de terminación del bucle.

Ese no es tu marcador de terminación sin embargo. No quieres parar ahí. Así que no lo hagas

El bucle terminará por sí solo cuando sys.stdin llegue al final de la entrada ( EOF ).

line.strip() descarte if not stripped: break line.strip() if not stripped: break reemplace result = result + stripped con result = result + line y luego escríbalo en el archivo para obtener un script de cp simple (aunque probablemente costoso).

Es probable que haya formas más eficientes de leer todas las líneas de la entrada estándar si quiere hacer algo con ellas (dependiendo de su objective).