Curso Python DGA 2011/sistemas/entradas salidas

Escribir a la salida estandar y de error
Python maneja las salidas estandar y de error a través de sys.stdout y sys.stderr


 * stdout y stderr son objetos que se comportan como ficheros (recordar: duck-typing), aunque cuidado: solo de lectura

Redireccionando las salidas estandar y de error
Habitualmente en un programa, las salidas estandar y de error escribirán a la consola, pero podemos redireccionarlas para que escriban en un fichero, simplemente reasignando sys.stdout y sys.stderr


 * redireccionando stdout:


 * redireccionando stderr:


 * cuidado con usar "with" en este caso!:


 * Escribiendo puntualmente a la salida de error usando print:

Leyendo de entrada estandar
Podemos leer de la entrada estandar de nuestro programa a través de sys.stdin. De esta forma podemos hacer que nuestro programa python pueda participar en una cadena usando pipes.

Manejando argumentos de linea de comandos

 * Los argumentos se reciben como una lista en sys.argv


 * El primer argumento es el propio script invocado

Manejando argumentos con el módulo getopt
try: opts, args = getopt.getopt(sys.argv[1:], "hs:u:v", ["help", "subject=", "user="]) except getopt.GetoptError: print_usage sys.exit(2)
 * La función getopt del módulo getopt recibe varios parámetros que indican cómo parsear las opciones:
 * la lista de argumentos que se obtiene con sys.argv: debemos evitar pasar el primer argumento (el propio script)
 * una cadena que indica las opciones abreviadas (ej: -h)
 * una cadena que indica los opciones largas (ej: --help)
 * Devuelve una tupla de opciones y argumentos. Las opciones son un array de tuplas que contienen cada una de las opciones que el usuario ha pasado junto con sus argumentos (si los hay). Los argumentos son el resto de elementos que se pasan en la invocación del script que no son opciones.

for opt, arg in opts: if opt in ("-h", "--help"): print_usage sys.exit elif opt == '-v': verbose=True elif opt in ("-s", "--subject"): subject = arg elif opt in ("-u", "--user"): user = arg

message = " ".join(args)