Con el Win32, este tendra un parpadeo, ya que este hace la llamada a la api en tiempo de ejecucion, mientras que con "noconsole", esto no pasara.
Así debería ser según lo que pude analizar en el código fuente de
Pyinstaller y su
bootloader. No utilizo habitualmente Python ni Pyinstaller, así que simplemente son conjeturas, pero son muy fundadas y evidentes en el código fuente, pues Pyinstaller utiliza como
bootloader un programa desarrollado en C para iniciar Python, y en cuyo punto de entrada o
entry point se especifica que la ventana no es visible.
Ademas si uso el api, y por alguna razon sucede un error en la ejecucion o cualquier otro, aparecera una terminal en plena pantalla, al igual que si automatizo comandos, se vera como se escriben en la terminal, de nuevo (aparecera una terminal en plena pantalla).
No, una excepción no controlada en un programa (ej. intérprete de Python) no provoca que la ventana(principal) oculta se vuelva visible, de todas formas no es esto a lo que yo me refería (sigue leyendo)...
Tampoco se mostrará la ventana del intérprete por imprimir mensajes, pero obviamente la impresión de mensajes es innecesaria puesto que la ventana estará oculta y los mensajes no se podrán leer, y aquí viene el problema: el intento de escritura/impresión de mensajes en una ventana oculta además puede ocasionar un error en ciertas circunstancias (que están descritas en los comentarios del código fuente y que al parecer solo afecta al intérprete de Python 2.x) al intentar vaciar el búfer de salida. Pyinstaller en teoría es capaz de evitar este tipo de error asignando al búfer Std-Out y Std-Err una clase 'NullWriter' la cual sustituye las funciones de escritura de mensajes y vaciado del búfer de salida por funciones que literalmente no hacen nada:
if sys.stdout is None:
sys.stdout = NullWriter()
if sys.stderr is None:
sys.stderr = NullWriter()
class NullWriter:
...
def write(*args):
pass
def flush(*args):
pass
...
Por todo esto dije que es más sofisticado. Si usas un
wrapper de la función 'ShowWindow' de la API de Windows estarás modificando una ventana actualmente visible para ocultarla (lo que producirá un "parpadeo" si llamas a esta función justo al inicio del programa, puesto que al momento de crear la ventana, esta se mostrará por un instante, y luego se ocultará), y eso será todo lo que harás, pero si en cambio te limitas a usar el parámetro 'noconsole' en Pyinstaller entonces la ventana directamente no se debería llegar a mostrar (ni por un microsegundo), y además se llevarán a cabo optimizaciones con respecto a la prevención de errores en el código en ejecución de Python.
Saludos.