Abriendo el stream por primera vez
Imagina que queremos desarrollar un programa que lea el contenido del archivo de texto llamado: C:\Users\User\Desktop\file.txt.
¿Cómo abrir ese archivo para leerlo? Aquí está el fragmento del código:
try:
stream = open("C:\Users\User\Desktop\file.txt", "rt")
# aqui se procesa el archivo
stream.close()
except Exception as exc:
print("No se puede abrir el archivo:", exc)
¿Que está pasando aqui?
- Hemos abierto el bloque try-except ya que queremos manejar los errores de tiempo de ejecución suavemente.
- Se emplea la función
open()
para intentar abrir el archivo especificado (ten en cuenta la forma en que hemos especificado el nombre del archivo). - El modo de apertura se define como texto para leer (como texto es la configuración predeterminada, podemos omitir la
t
en la cadena de modo). - En caso de éxito obtenemos un objeto de la función
open()
y lo asignamos a la variable del stream. - Si
open()
falla, manejamos la excepción imprimiendo la información completa del error (es bueno saber qué sucedió exactamente).
Streams pre-abiertos
Dijimos anteriormente que cualquier operación del stream debe estar precedida por la invocación de la función open()
. Hay tres excepciones bien definidas a esta regla.
Cuando comienza nuestro programa, los tres streams ya están abiertos y no requieren ninguna preparación adicional. Además, tu programa puede usar estos streams explícitamente si tienes cuidado de importar el módulo sys
:
import sys
Porque ahí es donde se coloca la declaración de estos streams.
Los nombres de los streams son: sys.stdin
, sys.stdout
y sys.stderr
.
Vamos a analizarlos:
sys.stdin
- stdin (significa entrada estándar).
- El stream
stdin
normalmente se asocia con el teclado, se abre previamente para la lectura y se considera como la fuente de datos principal para los programas en ejecución. - La función bien conocida
input()
lee datos destdin
por default. sys.stdout
- stdout (significa salida estándar).
- El stream
stdout
normalmente está asociado con la pantalla, preabierta para escritura, considerada como el objetivo principal para la salida de datos por el programa en ejecución. - La función bien conocida
print()
envía los datos al streamstdout
. sys.stderr
- stderr (significa salida de error estándar).
- El stream
stderr
normalmente está asociado con la pantalla, preabierta para escribir, considerada como el lugar principal donde el programa en ejecución debe enviar información sobre los errores encontrados durante su trabajo. - No hemos presentado ningún método para enviar datos a este stream (lo haremos pronto, lo prometemos).
- La separación de
stdout
(resultados útiles producidos por el programa) destderr
(mensajes de error, indudablemente útiles pero no proporcionan resultados) ofrece la posibilidad de redirigir estos dos tipos de información a los diferentes objetivos. Una discusión más extensa sobre este tema está más allá del alcance de nuestro curso. El manual del sistema operativo proporcionará más información sobre estos temas.