16. Apéndice
************


16.1. Modo interactivo
======================

There are two variants of the interactive *REPL*.  The classic basic
interpreter is supported on all platforms with minimal line control
capabilities.

On Windows, or Unix-like systems with "curses" support, a new
interactive shell is used by default since Python 3.13. This one
supports color, multiline editing, history browsing, and paste mode.
To disable color, see Controlling color for details.  Function keys
provide some additional functionality. "F1" enters the interactive
help browser "pydoc". "F2" allows for browsing command-line history
with neither output nor the *>>>* and *...* prompts. "F3" enters
"paste mode", which makes pasting larger blocks of code easier. Press
"F3" to return to the regular prompt.

When using the new interactive shell, exit the shell by typing "exit"
or "quit". Adding call parentheses after those commands is not
required.

If the new interactive shell is not desired, it can be disabled via
the "PYTHON_BASIC_REPL" environment variable.


16.1.1. Manejo de errores
-------------------------

When an error occurs, the interpreter prints an error message and a
stack trace. In interactive mode, it then returns to the primary
prompt; when input came from a file, it exits with a nonzero exit
status after printing the stack trace. (Exceptions handled by an
"except" clause in a "try" statement are not errors in this context.)
Some errors are unconditionally fatal and cause an exit with a nonzero
exit status; this applies to internal inconsistencies and some cases
of running out of memory.  All error messages are written to the
standard error stream; normal output from executed commands is written
to standard output.

Al ingresar el carácter de interrupción (por lo general "Control"-"C"
o "Supr") en el prompt primario o secundario, se cancela la entrada y
retorna al prompt primario.  [1] Tipear una interrupción mientras un
comando se están ejecutando lanza la excepción "KeyboardInterrupt",
que puede ser manejada con una sentencia "try".


16.1.2. Programas ejecutables de Python
---------------------------------------

En los sistemas Unix y tipo BSD, los programas Python pueden
convertirse directamente en ejecutables, como programas del intérprete
de comandos, poniendo la linea:

   #!/usr/bin/env python3

...al principio del script y dándole al archivo permisos de ejecución
(asumiendo que el intérprete están en la variable de entorno "PATH"
del usuario).  "#!" deben ser los primeros dos caracteres del archivo.
En algunas plataformas, la primera línea debe terminar al estilo Unix
("'\n'"), no como en Windows ("'\r\n'").  Notá que el carácter numeral
"'#'" se usa en Python para comenzar un comentario.

Se le puede dar permisos de ejecución al script usando el comando
**chmod**.

   $ chmod +x myscript.py

En sistemas Windows, no existe la noción de "modo ejecutable".  El
instalador de Python asocia automáticamente la extensión ".py" con
"python.exe" para que al hacerle doble clic a un archivo Python se
corra el script.  La extensión también puede ser ".pyw", en este caso
se omite la ventana con la consola que normalmente aparece.


16.1.3. El archivo de inicio interactivo
----------------------------------------

Cuando usas Python en forma interactiva, suele ser útil que algunos
comandos estándar se ejecuten cada vez que el intérprete se inicia.
Puedes hacer esto configurando la variable de entorno "PYTHONSTARTUP"
con el nombre de un archivo que contenga tus comandos de inicio.  Esto
es similar al archivo ".profile" en los intérpretes de comandos de
Unix.

Este archivo es solo leído en las sesiones interactivas del
intérprete, no cuando Python lee comandos de un script ni cuando
"/dev/tty" se explicita como una fuente de comandos (que de otro modo
se comporta como una sesión interactiva).  Se ejecuta en el mismo
espacio de nombres en el que los comandos interactivos se ejecutan,
entonces los objetos que define o importa pueden ser usados sin
cualificaciones en la sesión interactiva.  En este archivo también
puedes cambiar los prompts "sys.ps1" y "sys.ps2".

Si quieres leer un archivo de inicio adicional desde el directorio
actual, puedes programarlo en el archivo de inicio global usando algo
como "if os.path.isfile('.pythonrc.py'):
exec(open('.pythonrc.py').read())".  Si quieres usar el archivo de
inicio en un script, tienes que hacer lo siguiente de forma explícita
en el script:

   import os
   filename = os.environ.get('PYTHONSTARTUP')
   if filename and os.path.isfile(filename):
       with open(filename) as fobj:
           startup_file = fobj.read()
       exec(startup_file)


16.1.4. Los módulos de customización
------------------------------------

Python provee dos formas para customizarlo: sitecustomize y
usercustomize.  Para ver cómo funciona, necesitas primero encontrar
dónde está tu directorio para tu usuario de paquetes del sistema.
Inicia Python y ejecuta el siguiente código:

   >>> import site
   >>> site.getusersitepackages()
   '/home/user/.local/lib/python3.x/site-packages'

Ahora puedes crear un archivo llamado "usercustomize.py" en ese
directorio y poner lo que quieras en él.  Eso afectará cada ejecución
de Python, a menos que se inicie con la opción "-s" para deshabilitar
esta importación automática.

sitecustomize funciona de la misma manera, pero normalmente lo crea el
administrador de la computadora en el directorio global de paquetes
del sistema, y se importa antes que usercustomize. Para más detalles,
mira la documentación del módulo "site".

-[ Notas al pie ]-

[1] Un problema con el paquete GNU Readline puede prevenir esto.
