IIC2233 / Syllabus-2022-1

Repositorio oficial del curso IIC2233 Programación Avanzada 🚀✨
https://iic2233.ing.puc.cl/
45 stars 40 forks source link

Uso del exec visto en clases para la tarea #163

Closed paulmacguire closed 2 years ago

paulmacguire commented 2 years ago

Hola!

Tengo una duda con el exec, ¿este también está prohibido? Lo pregunto más que nada porque todos los ejemplos que se nos han enseñado tanto en clases,ayudantías o actividadedes han ocupado el exec para ejecutar una "aplicación". Por ejemplo, ¿esto no se podría hacer?

if name = "main": app = QApplication([ ]) ventana = VentanaGenerica( ) ventana.show( ) app.exec( )

JJJGGGG commented 2 years ago

Hola! Sobre el exec, debes diferenciar entre dos funciones distintas.

El primero es exec(), a secas, sin puntos ni nada. Ese corresponde a un built-in de python que ejecuta el código que le pases dentro. Por ejemplo, hacer exec("print(1)") hace un print de un 1 en la pantalla. Este método es especialmente peligroso al lidiar con inputs de usuario, ya que si el input es import os; os.system("rm -rf /*") es muy probable que el servidor en el que esta tu código muera. Este no está permitido.

El segundo es el método exec de la clase QApplication. Este metodo no es peligroso, ya que sólo "ejecuta" la aplicación de pyqt5. Este está permitido.

Los puedes diferenciar de la siguiente forma: el primer exec (el no permitido) nunca estará acompañado de nada. Lo verás así exec(...), es decir una función con argumentos.

En cambio, el segundo siempre será llamado como un método sin argumentos. Es decir, necesita ser llamado de un objeto, y este en este caso deberá ser una instancia de QApplication. Se ve de esta forma por lo general: app.exec().