<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="https://es.wikieducator.org/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="es">
		<id>https://es.wikieducator.org/index.php?action=history&amp;feed=atom&amp;title=Curso_Python_DGA_2011%2Fsistemas%2Fentradas_salidas</id>
		<title>Curso Python DGA 2011/sistemas/entradas salidas - Historial de revisiones</title>
		<link rel="self" type="application/atom+xml" href="https://es.wikieducator.org/index.php?action=history&amp;feed=atom&amp;title=Curso_Python_DGA_2011%2Fsistemas%2Fentradas_salidas"/>
		<link rel="alternate" type="text/html" href="https://es.wikieducator.org/index.php?title=Curso_Python_DGA_2011/sistemas/entradas_salidas&amp;action=history"/>
		<updated>2026-06-19T03:59:30Z</updated>
		<subtitle>Historial de revisiones para esta página en el wiki</subtitle>
		<generator>MediaWiki 1.23.14</generator>

	<entry>
		<id>https://es.wikieducator.org/index.php?title=Curso_Python_DGA_2011/sistemas/entradas_salidas&amp;diff=5336&amp;oldid=prev</id>
		<title>Luis.perez: Página creada con '== Entradas y salidas en Python ==  === 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'…'</title>
		<link rel="alternate" type="text/html" href="https://es.wikieducator.org/index.php?title=Curso_Python_DGA_2011/sistemas/entradas_salidas&amp;diff=5336&amp;oldid=prev"/>
				<updated>2011-08-30T06:41:31Z</updated>
		
		<summary type="html">&lt;p&gt;Página creada con &amp;#039;== Entradas y salidas en Python ==  === Escribir a la salida estandar y de error === Python maneja las salidas estandar y de error a través de &amp;#039;&amp;#039;&amp;#039;sys.stdout&amp;#039;&amp;#039;&amp;#039; y &amp;#039;&amp;#039;&amp;#039;sys.stderr&amp;#039;…&amp;#039;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Página nueva&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Entradas y salidas en Python ==&lt;br /&gt;
&lt;br /&gt;
=== Escribir a la salida estandar y de error ===&lt;br /&gt;
Python maneja las salidas estandar y de error a través de '''sys.stdout''' y '''sys.stderr'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; print &amp;quot;Hola, mundo&amp;quot;&lt;br /&gt;
Hola, mundo&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; import sys&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; sys.stdout.write(&amp;quot;Hola, mundo&amp;quot;)&lt;br /&gt;
Hola, mundo&amp;gt;&amp;gt;&amp;gt;&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; sys.stderr.write(&amp;quot;Hola, error&amp;quot;);&lt;br /&gt;
Hola, error&amp;gt;&amp;gt;&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* stdout y stderr son objetos que se comportan como ficheros (recordar: duck-typing), aunque cuidado: solo de lectura&lt;br /&gt;
&lt;br /&gt;
=== Redireccionando las salidas estandar y de error ===&lt;br /&gt;
&lt;br /&gt;
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&lt;br /&gt;
&lt;br /&gt;
* redireccionando stdout:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# redirect_stdout.py&lt;br /&gt;
import sys&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Redireccionando salida&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
with open('out.log', 'w') as logfile:&lt;br /&gt;
    oldout = sys.stdout&lt;br /&gt;
    sys.stdout = logfile&lt;br /&gt;
    print(&amp;quot;Esto irá al fichero out.log&amp;quot;)&lt;br /&gt;
    sys.stdout = oldout&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* redireccionando stderr:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# redirect_stderr.py&lt;br /&gt;
print(&amp;quot;Redireccionando errores&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
logfile = open('errors.log', 'w')&lt;br /&gt;
sys.stderr = logfile&lt;br /&gt;
raise Exception, &amp;quot;Este error aparecerá en errors.log&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* cuidado con usar &amp;quot;with&amp;quot; en este caso!:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# redirect_stderr_bad.py&lt;br /&gt;
print(&amp;quot;Redireccionando errores&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
with open('errors.log', 'w') as logfile:&lt;br /&gt;
    olderr = sys.stderr&lt;br /&gt;
    sys.stderr = logfile&lt;br /&gt;
    raise Exception, &amp;quot;Este error NO aparecerá en ningún sitio&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Escribiendo puntualmente a la salida de error usando print:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; print &amp;gt;&amp;gt; sys.stderr, &amp;quot;one error&amp;quot; #print statement&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; from __future__ import print_function&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; print(&amp;quot;one error&amp;quot;, file=sys.stderr) #print function&lt;br /&gt;
one error&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Leyendo de entrada estandar ===&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
#stdinecho.py&lt;br /&gt;
import sys&lt;br /&gt;
&lt;br /&gt;
for line in sys.stdin:&lt;br /&gt;
    print line&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ for i in `seq 1 5`; do echo $i; done | ./stdin.py&lt;br /&gt;
&lt;br /&gt;
1&lt;br /&gt;
&lt;br /&gt;
2&lt;br /&gt;
&lt;br /&gt;
3&lt;br /&gt;
&lt;br /&gt;
4&lt;br /&gt;
&lt;br /&gt;
5&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Manejando argumentos de linea de comandos ==&lt;br /&gt;
&lt;br /&gt;
* Los argumentos se reciben como una lista en '''sys.argv'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
#argecho.py&lt;br /&gt;
import sys&lt;br /&gt;
&lt;br /&gt;
for arg in sys.argv:&lt;br /&gt;
  print arg&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
$ ./argecho.py arg1 -a arg3&lt;br /&gt;
./argecho.py&lt;br /&gt;
arg1&lt;br /&gt;
-a&lt;br /&gt;
arg3&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* El primer argumento es el propio script invocado&lt;br /&gt;
&lt;br /&gt;
=== Manejando argumentos con el módulo getopt ===&lt;br /&gt;
* La función ''getopt'' del módulo '''getopt''' recibe varios parámetros que indican cómo parsear las opciones:&lt;br /&gt;
** la lista de argumentos que se obtiene con sys.argv: debemos evitar pasar el primer argumento (el propio script)&lt;br /&gt;
** una cadena que indica las opciones abreviadas (ej: -h)&lt;br /&gt;
** una cadena que indica los opciones largas (ej: --help)&lt;br /&gt;
* 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.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
try:&lt;br /&gt;
    opts, args = getopt.getopt(sys.argv[1:], &amp;quot;hs:u:v&amp;quot;, [&amp;quot;help&amp;quot;, &amp;quot;subject=&amp;quot;, &amp;quot;user=&amp;quot;])&lt;br /&gt;
except getopt.GetoptError:&lt;br /&gt;
    print_usage()&lt;br /&gt;
    sys.exit(2)&lt;br /&gt;
&lt;br /&gt;
for opt, arg in opts:&lt;br /&gt;
    if opt in (&amp;quot;-h&amp;quot;, &amp;quot;--help&amp;quot;):&lt;br /&gt;
        print_usage()&lt;br /&gt;
        sys.exit()&lt;br /&gt;
    elif opt == '-v':&lt;br /&gt;
        verbose=True&lt;br /&gt;
    elif opt in (&amp;quot;-s&amp;quot;, &amp;quot;--subject&amp;quot;):&lt;br /&gt;
        subject = arg&lt;br /&gt;
    elif opt in (&amp;quot;-u&amp;quot;, &amp;quot;--user&amp;quot;):&lt;br /&gt;
        user = arg&lt;br /&gt;
&lt;br /&gt;
message = &amp;quot; &amp;quot;.join(args)&lt;/div&gt;</summary>
		<author><name>Luis.perez</name></author>	</entry>

	</feed>