SYS
Para saber más http://www.python-course.eu/sys_module.phpEl módulo sys provee funcionalidad referida al intérprete Python.
Variables
|
Retorna una lista con todos los argumentos pasados por línea de comandos. Al ejecutar
|
|
Retorna el path absoluto del binario ejecutable del intérprete de Python |
|
Retorna el número positivo entero mayor, soportado por Python |
|
Retorna la plataforma sobre la cuál se está ejecutando el intérprete |
|
Retorna el número de versión de Python con información adicional |
Métodos
|
Forzar la salida del intérprete |
|
Retorna la codificación de caracteres por defecto |
|
Retorna la codificación de caracteres que se utiliza para convertir los nombres de archivos unicode en nombres de archivos del sistema |
|
Retorna el tamaño del objeto pasado como parámetro. El segundo argumento (opcional) es retornado cuando el objeto no devuelve nada. |
= = =
Ejemplo 1
Este programa imprimirá la versión de Python y saldrá antes de imprimir "Hola"# -*- coding: utf-8 -*- import os, sys print sys.version print sys.exit() print "Hola"
Flujos de datos estándar
En
relación a un terminal, tenemos lo que se conoce como "pipes"
(tuberías). Cada terminal se conecta normalmente a tres tuberías
estándar: una de entrada , stdin, normalmente el teclado. Otra de salida, normalmente conectada a la ventana del terminal, stdout y la otra, también conectada a la ventana, de errores, stderr.
Se puede acceder directamente a estas tuberías a través del módulo sys.# -*- coding: utf-8 -*-
import os, sys
print sys.stdin
print sys.stdout
print sys.stderr Como podemos observar tienen el carácter de "ficheros", siendo stdin de lectura y los otros dos de escritura.
Escribo y leo datos
# -*- coding: utf-8 -*-import os, sys
print "Escribo algo"
sys.stdout.write("Escribo algo de otra forma")
print "\n"
cadena = raw_input("Di algo...: ")
print cadena
print "Escribe algo más...", sys.stdin.readline()[:-1]
= = =
Ejemplo de programa
# -*- coding: utf-8 -*-import sys
while True:
# Escribo
print "Otra vez..."
try:
# Escribiendo desde stdin. Para salir CTRL + C
print "Introduce un número: ", ;
number = sys.stdin.readline()[:-1]
# number = raw_input("")
number = int(number)
except EOFError:
print "\nHasta luego, Lucas"
break
except ValueError:
print "\nNo es un número"
else:
if number == 0:
print >> sys.stderr, "0 no tiene inverso"
else:
print "inverso de %d es %f" % (number, 1.0/number)
Prueba a entrar en un terminal de Linux, shell, navega hasta la carpeta donde está el programa y ejecútalo (python numeros.py). Imagina que le has puesto el nombre numeros.py. Bien, ahora escribe un pequeño fichero de texto con diez números del 0 al 10 y llámalo numeros.txt (en la misma carpeta que numeros.py)
- Descomenta la línea que introduce el número como raw_input.
- Comenta la que lo introduce como stdin.
- Escribe la orden siguiente python numeros.py < numeros.txt
Comprueba como el programa lee los números desde el fichero, no aceptando la introducción de datos del teclado sino desde el fichero. Asimismo si escribo...
- python numeros.py < numeros.txt > inversos.txt
Se genera un fichero de salida inversos.txt y no se muestra la información en pantalla. Tanto los inputs como los prints (excepto el print redirigido a sys.stderr) se dirigen ahora a los nuevos ficheros que indican las entradas y las salidas de datos.
= = =
Redirecciono
En un programa puede cambiarse el comportamiento de stdout o stdin. Por ejemplo, en este programa se guarda el "fichero" stdout a una variable, se abre un fichero y se redirige la salida stdout a ese fichero. Todo lo que se "imprima" ahora no lo hace en la pantalla, sino en el fichero. Se recupera la situación inicial y se cierra el fichero abierto.
import sysprint("Usando stdout")
# stdout se guarda
save_stdout = sys.stdout
fh = open("test.txt","w")
sys.stdout = fh
print("Esta línea se escribe en test.txt")
# se recupera stdout:
sys.stdout = save_stdout
fh.close()
= = =
Redirecciono la salida de errores
O puedo redireccionar la salida de los errores. Al cometer un error (dividir entre 0), se escribe en el fichero o escribiendo con print directamente.
import syssave_stderr = sys.stderr
fh = open("errors.txt","w")
sys.stderr = fh
# Comentar / descomentar la siguiente línea
# x = 10 / 0
print >> sys.stderr, "escribe en error.txt"
# return to normal:
sys.stderr = save_stderr
fh.close()
No hay comentarios:
Publicar un comentario