miércoles, 22 de mayo de 2024

Interfaz. Python.

Consola (cmd)

Llegados a este punto, y aunque es mucho lo que aun nos queda por aprender sobre los temas tratados, parece oportuno dar un salto cualitativo en el modo de proseguir con este proceso de aprendizaje. También lo es (oportuno) empezar a desarrollar algoritmos orientados a un uso práctico y no sólo con el propósito de aprendizaje y práctica, aunque ambos siguen siendo objetivos fundamentales y prácticas necesarias. Desde esta nueva perspectiva debemos empezar a correr nuestros algoritmos desde fuera del IDLE, ya que es éste el modo en que se espera sean usados.

El modo primario y directo en el que esto se va a producir es a través de la consola de comandos (cmd), ya que aun no hemos aprendido nada sobre interfaces gráficas (no así en OOo Basic, donde estamos empezando a dar nuestros primeros pasos). No es éste un modo muy elegante de funcionar un programa actual, aunque tampoco extraño, ya que sigue siendo un formato plenamente vigente.

La estética y "modernidad" no es precisamente el primer problema que debemos abordar, sino otra mucho más básica: lo efímero de la presencia activa del programa. 

Hasta este momento todos los ejercicios que hemos realizado los hemos creado y probado en y desde el IDLE de Python, pero no es este el modo esperado y deseado de funcionamiento. Por ello, y aun siguiendo en modo consola, necesitamos hacer que nuestros "programas" funcionen al margen del IDLE si queremos que sean realmente funcionales. Y existe una forma simple y directa de hacerlo: es suficiente con hacer doble clic sobre el archivo .py para que se lance en el entorno de la cmd. Si el algoritmo no contiene errores y el intérprete Python está correctamente instalado (algo que presuponemos en estos momentos y a estas alturas), lo esperable es que el archivo se ejecute correctamente, pero nos espera una desagradable sorpresa: una vez ejecutado, de forma instantánea se cierra el CMD y nos quedamos con dos palmos de narices.

Y no, no es que haya fallado nada, es simplemente que es ese el modo normal de funcionamiento del intérprete: así ahorra espacio de memoria del sistema, evitando efectos negativos en el funcionamiento del procesador. Pero no deja de ser un problema importante, ya que afecta a la funcionalidad del algoritmo al eliminar el componente output en la práctica.

Por desgracia en muchos materiales de aprendizaje del lenguaje Python, algo tan básico parece pasar desapercibido y no se trata con la importancia que tiene para el o la aprendiz, así que se ve (nos vemos) obligad@(s) a indagar por aquí y por allá, no siempre con éxito.

Como resultado de mi propia investigación ofrezco dos soluciones, aunque supongo que no serán las únicas: una es específica del entorno Windows y otra es genérica. Empezaré por exponer la primera.

Desde y para Windows la opción específica consiste en la llamada (importar) al módulo msvcrt y su uso como función getch() al final del programa. Su sintaxis básica es la siguiente:

import msvcrt

    Código

msvcrt.getch()

El módulo msvcrt contiene un conjunto de rutinas útiles para el funcionamiento en Windows, siendo .getch() una de sus funciones, concretamente una función que lee una pulsación de la tecla y retorna el carácter resultante como una cadena de caracteres de bytes, aunque no muestra nada en la consola (para más información de las rutinas del módulo msvcrt ver descripción detallada aquí).

Otra forma de evitar el cierre prematuro de la consola es escribir la función input() al final del script. De este modo la finalización del algoritmo queda en suspenso hasta que se pulse una tecla, sólo que, en este caso la tecla a pulsar para cerrar la cmd es enter, (y no otra cualquiera), mientras que mediante msvcrt.getch() cualquier pulsación es suficiente (1).

Esta limitación se contrarresta con la funcionalidad universal del procedimiento. Y sus limitaciones no resultan difíciles de sortear: es suficiente con informar al usuario o usuaria mediante un mensaje previo a la activación de la función. Para ello es suficiente con un print() que contenga el mensaje de advertencia. Un ejemplo sencillo podría ser el siguiente:

vNombre=input("¿Cómo te llamás? ")
print("Bienvenido al programa", vNombre)
print("Ha finalizado el programa. Para salir pulsa ENTER")
input()

En esta entrada hemos dado un primer paso para desarrollar código funcional en Python pensando en utilizar los algoritmos que desarrollemos como programas funcionales, esto es: que no dependan exclusivamente del IDLE para su ejecución y que devuelvan resultados útiles para nuestro trabajo. Para ello, la primera meta a alcanzar es que el resultado del procesamiento permanezca en pantalla hasta que decidamos cerrar la consola (cmd). Esto nos garantiza funcionalidad en la fase output y lo conseguimos añadiendo al script dos sentencias: una específica para Windows y otra genérica.

NOTA.

(1) En python.2 se empleaba la función raw_input(), pero en python.3 esta instrucción provoca error.

No hay comentarios:

Publicar un comentario

Comenta esta entrada