Subsecciones


2. Utilización del intérprete de Python


2.1 Llamar al intérprete

En Unix, el intérprete de Python se suele instalar como /usr/local/bin/python en aquellas máquinas donde esté disponible. En Windows, se instala en el directorio Archivos de programa. Poner este directorio en la ruta de ejecutables hace posible arrancarlo tecleando en el intérprete de órdenes la orden:

python

Como la elección del directorio donde reside el intérprete es una opción de instalación, es posible que se halle en otros lugares. Consulta con tu guru de Python local o tu administrador de sistemas (por ejemplo, /usr/local/python es una alternativa frecuente).

Teclear un carácter fin de fichero (Control-D en Unix, Control-Z en DOS o Windows) en el intérprete causa la salida del intérprete con un estado cero. Si eso no funciona, se puede salir del intérprete tecleando las siguientes órdenes: "import sys; sys.exit()".

Las opciones de edición de la línea de órdenes no son muy destacables. En Unix, es posible que quien instalara el intérprete en tu sistema incluyera soporte para la biblioteca de GNU `readline', que permite una edición de línea más elaborada y la recuperación de órdenes anteriores. El modo más rápido de ver si hay soporte de edición de líneas es teclear Control-P en cuanto aparece el intérprete. Si pita, la edición de líneas está disponible (en el Apéndice A hay una introducción a las teclas de edición). Si no sale nada o sale P, no está disponible la edición de líneas y sólo se puede utilizar la tecla de borrado para borrar el último carácter tecleado.

El intérprete funciona como el intérprete de órdenes de Unix: cuando se lo llama con la entrada estándar conectada a un dispositivo tty, lee y ejecuta las órdenes interactivamente; cuando se le da un nombre de fichero como argumento o se le da un fichero como entrada estándar, lee y ejecuta un guion desde ese fichero.

Otro modo de arrancar el intérprete es "python -c orden [argumento] ...", que ejecuta las sentencias de orden, de forma análoga a la opción -c de la línea de órdenes. Como las sentencias de Python suelen contener espacios u otros caracteres que la línea de órdenes considera especiales, lo mejor es encerrar orden entre dobles comillas por completo.

Hay módulos de Python que son útiles como programas independientes. Se los puede llamar mediante "python -m módulo [arg] ...", que ejecuta el fichero de código fuente de module como si se hubiera dado el nombre completo en la línea de órdenes.

Observa que hay una diferencia entre "python fichero" y "python <fichero". En el caso de la redirección, las solicitudes de entrada del programa, tales como llamadas a input() y raw_input(), se satisfacen desde fichero. Como este fichero ya se ha leído hasta el final antes de empezar la ejecución del programa, el programa se encuentra el fin de fichero inmediatamente. En el caso del nombre de fichero como argumento, las solicitudes de entrada son satisfechas desde lo que esté conectado a la entrada estándar (esto suele ser lo deseado).

Cuando se utiliza un fichero de guion, a veces es útil ejecutar el guion y entrar en modo interactivo inmediatamente después. Esto se consigue pasando -i como argumento, antes del nombre del guion (esto no funciona si el guion se lee desde la entrada estándar, por la misma razón indicada en el párrafo anterior).


2.1.1 Traspaso de argumentos

El intérprete pasa el nombre del guion y los argumentos, si los conoce, mediante la variable sys.argv, que es una lista de cadenas. Su longitud es al menos uno (cuando no hay guion y no hay argumentos, sys.argv[0] es una cadena vacía). Cuando se usa -m módulo, se le da a sys.argv[0] el nombre completo del módulo adecuado. Cuando el guion es '-' (es decir, la entrada estándar), sys.argv[0] vale '-'. Cuando se utiliza -c orden, sys.argv[0] vale '-c'. Las opciones tras -c orden o -m módulo no las utiliza el intérprete Python, sino que quedan en sys.argv para uso de la orden o del módulo.


2.1.2 Modo interactivo

Cuando se leen órdenes desde una tty, se dice que el intérprete está en modo interactivo. En este modo, espera a la siguiente orden con el indicador principal, que suele se tres signos `mayor' (">>>" ). Para las líneas adicionales, se utiliza el indicador secundario, por omisión tres puntos ("... ").

El intérprete muestra un mensaje de bienvenida con su número de versión e información de derechos de copia, antes de mostrar el primer indicador:

python
Python 1.5.2b2 (#1, Feb 28 1999, 00:02:06)  [GCC 2.8.1] on sunos5
Copyright 1991-1995 Stichting Mathematisch Centrum, Amsterdam
>>>

Las líneas de continuación son necesarias al introducir construcciones milti-línea. Por ejemplo, echa un vistazo a esta sentencia if:

>>> la_tierra_es_plana = 1
>>> if la_tierra_es_plana:
...     print "¡Cuidado, que te caes!"
...
¡Cuidado, que te caes!


2.2 El intérprete y su entorno


2.2.1 Gestión de errores

Cuando ocurre un error, el intérprete muestra un mensaje de error y una traza de la pila. En el modo interactivo, después vuelve al indicador principal. Si la entrada venía de un fichero, sale con un resultado distinto de cero tras mostrar la traza de la pila (las excepciones gestionadas con una sentencia except en una construcción try no son errores en este contexto). Existen errores no capturables que hacen que se cierre el intérprete con un resultado distinto de cero. Por ejemplo, esto ocurre con las inconsistencias internas y, en algunos casos, al quedarse sin memoria. Todos los mensajes de error se escriben en la salida de error estándar (la pantalla, si no se redirige a un fichero u otra cosa). La salida del programa se escribe en la salida estándar (que también es la pantalla, salvo en el caso mencionado antes).

Si se teclea el carácter de interrupción (suele ser Control-C o DEL) en el indicador principal o secundario se cancela la entrada y se hace volver el indicador primario2.1. Si se intenta interrumpir mientras se ejecuta una orden, se activa la excepción KeyboardInterrupt, que puede ser gestionada por una construcción try.


2.2.2 Guiones Python ejecutables

En sistemas Unix tipo BSD, los guiones Python se pueden hacer ejecutables directamente, como guiones de línea de órdenes, poniendo la línea

#! /usr/bin/env python

(suponiendo que el intérprete está en el PATH del usuario) al principio del guion y dándole al guion permisos de ejecución. "#!" deben ser los primeros caracteres del fichero. En algunas plataformas, esta primera línea debe terminar con un fin de línea tipo Unix ("\n"), no tipo Mac OS ("\r") ni Windows ("\r\n"). Observa que la almohadilla, "#", se utiliza para iniciar un comentario en Python.

Se le puede dar al guion un modo o permiso ejecutable, con la orden chmod:

$ chmod +x miguion.py

2.2.3 Codificación del código fuente

Se puede utilizar codificaciones distintas de ASCII en los archivos de código fuente Python. El mejor modo es poner una línea de comentario justo después de la línea de #! (si no la hay, ponerla la primera) para definir la codificación del código fuente:


 # -*- coding: codificación -*- 
 

Con esta declaración, se indica que todos los caracteres del código fuente tienen la codificación y será posible escribir directamente literales de cadena Unicode en la codificación seleccionada. La lista de codificaciones posibles se encuentra en la Referencia de las bibliotecas de Python, en la sección sobre codecs.

Por ejemplo, para escribir literales Unicode que incluyan el símbolo de la moneda Euro, se puede utilizar la codificación ISO-8859-15, en la que el símbolo del Euro tiene el ordinal 164. Este guion mostrará el valor 8364 (el ``codepoint'' Unicode correspondiente al símbolo del Euro) y terminará:


 # -*- coding: iso-8859-15 -*-
 
 moneda = u"€"
 print ord(moneda)
 

Si tu editor tiene la posibilidad de guardar ficheros como UTF-8 con una marca de orden de bytes UTF-8 (también conocida como BOM), también se podrá usar esto en lugar de una declaración de codificación. IDLE tiene esta capacidad si se establece Opciones/General/Codificación de la fuente predeterminada/UTF-8. Obsérvese que esta firma no la entienden las antiguas versiones de Python (2.2 y anteriores), ni tampoco los sistemas operativos en el caso de guiones con líneas #! (sólo para los sistemas tipo Unix).

Mediante el uso de UTF-8 (bien por la firma o por la declaración de codificación), se pueden utilizar caracteres de la mayoría de los lenguajes tanto en los literales como en los comentarios. No se puede usar caracteres no ASCII en los identificadores. Para mostrar dichos caracteres adecuadamente, tu editor debe reconocer que el fichero es UTF-8, además de usar un tipo de letra que contenga los caracteres hallados en el fichero.


2.2.4 El fichero de arranque interactivo

Al usar Python interactivamente, suele ser útil que se ejecuten algunas órdenes estándar cada vez que se arranca el intérprete. Esto se puede lograr poniendo en la variable de entorno PYTHONSTARTUP el nombre del fichero que contiene las órdenes de arranque. Es similar a la característica .profile de la línea de órdenes de Unix o al fichero autoexec.bat de MS-DOS.

Este fichero sólo se lee en sesiones interactivas, no cuando Python lee órdenes de un guion, ni cuando se utiliza /dev/tty como fuente explícita de órdenes (lo que hace que se comporte como una sesión interactiva salvo en este detalle). Estas órdenes se ejecutan en el mismo espacio nominal que las órdenes interactivas, para que los objetos definidos o módulos importados se puedan usar sin necesidad de prefijos en la sesión interactiva. También se puede cambiar los indicadores principal y secundario (sys.ps1 y sys.ps2) usando este fichero.

Si deseas leer un archivo de arranque adicional del directorio actual puedes programarlo así en el fichero de arranque global, de este modo: "if os.path.isfile('.pythonrc.py'): execfile('.pythonrc.py')". Si deseas utilizar el fichero de arranque en un guion, debes hacerlo explícitamente dentro del guion:

import os
nombreFich = os.environ.get('PYTHONSTARTUP')
if nombreFich and os.path.isfile(nombreFich):
    execfile(nombreFich)



Notas al pie

... primario2.1
Puede haber problemas con el paquete GNU readline que impidan esto.
Consultar en Acerca de este documento... información para sugerir cambios.