¿Cómo mantener abierta una ventana de salida de script Python?

193

Acabo de comenzar con Python. Cuando ejecuto un archivo de script de Python en Windows, aparece la ventana de salida pero desaparece instantáneamente. Necesito que permanezca allí para poder analizar mi salida. ¿Cómo puedo mantenerlo abierto?

rohitmishra
fuente
66
Un tardío +1000. Estoy usando Python como lenguaje de enseñanza para un amigo que usa Windows, y no podía creer cuántos problemas tenía (al menos según la documentación existente) llegar a donde podríamos ejecutar un script y ver el resultado.
Cascabel
2
simplemente arrastre / suelte su script en una ventana de cmd
JinSnow
Pensarías que la ventana de salida debería permanecer abierta por defecto. Lo hace cuando se ejecuta Python en Mac OS. Muy frustrante
Fandango68
Voy a enlazar otra pregunta mantener las ventanas de la consola abierta después de un error de Python a ésta (la que he publicado una respuesta para la depuración de scripts python de arrastrar y soltar.)
akinuri
Vea la respuesta que @maurizio publicó a continuación: es la única que no necesita que cambie sus scripts de Python.
roryhewitt

Respuestas:

157

Tienes pocas opciones:

  1. Ejecute el programa desde una terminal ya abierta. Abra un símbolo del sistema y escriba:

    python myscript.py

    Para que eso funcione, necesitas el ejecutable de Python en tu camino. Simplemente verifique cómo editar las variables de entorno en Windows y agregue C:\PYTHON26(o el directorio en el que instaló Python).

    Cuando finaliza el programa, lo regresará al indicador de cmd en lugar de cerrar la ventana.

  2. Agregue código para esperar al final de su secuencia de comandos. Para Python2, agregando ...

    raw_input()

    ... al final del script hace que espere la Enterclave. Ese método es molesto porque tiene que modificar el script y debe recordar eliminarlo cuando haya terminado. Especialmente molesto al probar los guiones de otras personas. Para Python3, use input().

  3. Use un editor que haga una pausa por usted. Algunos editores preparados para python se detendrán automáticamente después de la ejecución. Otros editores le permiten configurar la línea de comandos que utiliza para ejecutar su programa. Me resulta particularmente útil configurarlo como " python -i myscript.py" cuando se ejecuta. Eso lo lleva a un shell de Python después del final del programa, con el entorno del programa cargado, por lo que puede seguir jugando con las variables y las funciones y métodos de llamada.

nosklo
fuente
8
+1 al elemento 3. Uso Scite como mi editor de Python y simplemente mantiene la salida en su propia ventana de salida. Esto es realmente útil porque potencialmente puede ver el resultado de más de una ejecución en una sola ventana.
Joris Timmermans
Puedo ver la salida ejecutándola desde una terminal ya abierta. ¿Pero necesito dar la dirección completa del script en el comando python? ¿Se puede evitar eso? Cuando uso el método raw_input (), me da NameError: el nombre 'raw_input' no está definido. ¿Puedes sugerir un editor que se detenga automáticamente después de la ejecución?
rohitmishra
1
@movingahead: ¿tal vez estás usando Python 3? en python 3 se renombró a input (). Pero usaría python 2.6 por ahora, ya que python 3 carece de importantes bibliotecas de terceros que aún no se han portado. (Ver otras preguntas sobre python 2vs3). Sobre el editor, no uso Windows, Notepad ++ te permite configurar el comando. Yo uso emacs que tiene una versión de Windows, pero nunca la usé.
nosklo
@nosklo gracias !! Yah, estoy usando Python 3. Hacer cosas básicas ahora, así que no debería ser un gran problema. Intentaré notepad ++. Actualmente estoy probando Pydev para Eclipse
rohitmishra
@movingahead Uso el estudio Aptana. (Pydev pre empaquetado). es muy bueno. nada que decir.
v.oddou
52

cmd /kes la forma típica de abrir cualquier aplicación de consola (no solo Python) con una ventana de consola que permanecerá después de que la aplicación se cierre. La forma más fácil en que puedo pensar en hacer eso es presionar Win + R, escribir cmd /ky luego arrastrar y soltar el script que desea en el cuadro de diálogo Ejecutar.

tzot
fuente
3
Fantástica respuesta. Deberías haber conseguido esto.
Jagu
1
Solo para el comando python os.system que haría os.system ("cmd / k" + myAppPath + "" + myFlagsString)
Jay
1
cmd /kes solo para Windows. No puedo ayudar con una alternativa para Mac, lo siento.
tzot
¿Tiene que arrastrar el script, incluido el comando Python mismo? Lo siento, ¿puedo tener un ejemplo por favor? Soy nuevo, muy nuevo en Python bajo Windows.
Fandango68
1
Esta respuesta fue la más directa y hace exactamente lo que necesitaba en un entorno Windows. Una vez que el programa se ejecuta, la ventana del terminal permanece abierta.
CameronAtkinson
41

Inicie el script desde la ventana cmd ya abierta o al final del script agregue algo como esto, en Python 2:

 raw_input("Press enter to exit ;)")

O, en Python 3:

input("Press enter to exit ;)")
Anurag Uniyal
fuente
1
"Cualquier tecla" no funcionará, solo Enter lo hará (o Ctrl + D, dependiendo de dónde nos encontremos).
Daniel Andersson
1
@DanielAndersson sí, cambió el texto
Anurag Uniyal
55
Si lo piensas, es algo profundo que solo "entrar" te permitirá "salir" ...
Joel B
tenga en cuenta que la terminal se cerrará independientemente, si ocurre una excepción
johnson
19

Para mantener su ventana abierta en caso de excepción (aún, mientras imprime la excepción)

Python 2

if __name__ == '__main__':
    try:
        ## your code, typically one function call
    except Exception:
        import sys
        print sys.exc_info()[0]
        import traceback
        print traceback.format_exc()
        print "Press Enter to continue ..." 
        raw_input() 

Para mantener la ventana abierta en cualquier caso:

if __name__ == '__main__':
    try:
        ## your code, typically one function call
    except Exception:
        import sys
        print sys.exc_info()[0]
        import traceback
        print traceback.format_exc()
    finally:
        print "Press Enter to continue ..." 
        raw_input()

Python 3

Para Python3, tendrá que usar input()en lugar deraw_input() y, por supuesto, adaptar las printdeclaraciones.

if __name__ == '__main__':
    try:
        ## your code, typically one function call
    except BaseException:
        import sys
        print(sys.exc_info()[0])
        import traceback
        print(traceback.format_exc())
        print("Press Enter to continue ...")
        input() 

Para mantener la ventana abierta en cualquier caso:

if __name__ == '__main__':
    try:
        ## your code, typically one function call
except BaseException:
    import sys
    print(sys.exc_info()[0])
    import traceback
    print(traceback.format_exc())
finally:
    print("Press Enter to continue ...")
    input()
Antonio
fuente
15

puede combinar las respuestas antes: (para el usuario Notepad ++)

presione F5 para ejecutar el script actual y escriba el comando:

cmd /k python -i "$(FULL_CURRENT_PATH)"

de esta manera, permanece en modo interactivo después de ejecutar su script de Python Notepad ++ y puede jugar con sus variables, etc. :)

Feinmann
fuente
Esto hace un gran archivo por lotes de Windows, si cambia $ (FULL_CURRENT_PATH) a un nombre de ruta de Windows.
Noumenon
Me resultó mucho más fácil obtener el complemento PyNPP y asignar un acceso directo para ejecutarlo (no olvide deshabilitar el acceso directo F5 anterior)
JinSnow
11

Cree un archivo por lotes de Windows con estas 2 líneas:

python your-program.py

pause
maurizio
fuente
2
O import os os.system("pause")al final del .pyarchivo
Spikatrix
44
Esta es la única respuesta aquí que es remotamente correcta. Las respuestas que requieren que corrompen todos los scripts de Python única vez que va a funcionar con raw_inputo otro tipo de basura son simplemente erróneas. Escriba su comando en la línea de comando como Python espera que lo haga, o use el lenguaje por lotes que se ha proporcionado con MS-DOS para este propósito exactamente desde agosto de 1981 .
Kevin J. Chase
1
aún mejor, python %*úselo y configúrelo como uno de los programas "abrir con" para que pueda hacer clic derecho en un archivo .py para abrir una ventana de pausa o también lo coloque en mi carpeta Anaconda3 (en RUTA) como py_pause.bat, así que ahora Puedo correr py_pause my-prog.py all my argsdesde la línea cmd
brian
7

En python 2 puedes hacerlo con: raw_input ()

>>print("Hello World!")    
>>raw_input('Waiting a key...')

En python 3 puedes hacerlo con: input ()

>>print("Hello world!")    
>>input('Waiting a key...')

Además, puedes hacerlo con el time.sleep (time)

>>import time
>>print("The program will close in 5 seconds")
>>time.sleep(5)
Brandon Aguilar
fuente
7

Utilizando atexit, puede pausar el programa justo cuando sale. Si un error / excepción es el motivo de la salida, se detendrá después de imprimir el stacktrace.

import atexit

# Python 2 should use `raw_input` instead of `input`
atexit.register(input, 'Press Enter to continue...')

En mi programa, puse la llamada atexit.registeren la exceptcláusula, de modo que solo se pausará si algo salió mal.

if __name__ == "__main__":
    try:
        something_that_may_fail()

    except:
        # Register the pause.
        import atexit
        atexit.register(input, 'Press Enter to continue...')

        raise # Reraise the exception.
leewz
fuente
5

Tuve un problema similar. Con Notepad ++ solía usar el comando: C:\Python27\python.exe "$(FULL_CURRENT_PATH)"que cerraba la ventana de cmd inmediatamente después de que terminaba el código.
Ahora estoy usando lo cmd /k c:\Python27\python.exe "$(FULL_CURRENT_PATH)"que mantiene abierta la ventana cmd.

Matej
fuente
1
Es posible que desee agregar "; C: \ Python27" al final de su variable de entorno Path. De esa manera se puede acortar a 'cmd / k python -i "$ (FULL_CURRENT_PATH)"' - Exactamente lo que dice la respuesta anterior más el útil -i.
Enigma
5

En Python 3

input('Press Enter to Exit...')

Hará el truco.

Amila
fuente
2

Para mantener la ventana abierta, estoy de acuerdo con Anurag y esto es lo que hice para mantener mis ventanas abiertas para pequeños programas de tipo de cálculo.

Esto solo mostraría un cursor sin texto:

raw_input() 

El siguiente ejemplo le daría un mensaje claro de que el programa ha terminado y no espera otra solicitud de entrada dentro del programa:

print('You have reached the end and the "raw_input()" function is keeping the window open') 
raw_input()

¡Nota!
(1) En python 3, no hay raw_input () , solo input () .
(2) Use comillas simples para indicar una cadena; de lo contrario, si escribe dobles alrededor de cualquier cosa, como "raw_input ()", pensará que es una función, variable, etc., y no texto.

En el siguiente ejemplo, uso comillas dobles y no funcionará porque cree que hay una ruptura en las comillas entre "la" y "función", aunque cuando lo lees, tu propia mente puede entenderlo perfectamente:

print("You have reached the end and the "input()" function is keeping the window open")
input()

Esperemos que esto ayude a otros que podrían estar comenzando y aún no han descubierto cómo piensa la computadora todavía. Puede tomar un tiempo : o)

Mr Whybull
fuente
2

Si desea ejecutar su script desde un acceso directo de escritorio, haga clic derecho en su archivo de Python y seleccione Send to|Desktop (create shortcut). Luego haga clic derecho en el acceso directo y seleccione Propiedades. En la pestaña Acceso directo, seleccione el cuadro de texto Destino: y agregue cmd /k delante de la ruta y haga clic en Aceptar. El acceso directo ahora debe ejecutar su script sin cerrar y no necesita elinput('Hit enter to close')

Tenga en cuenta que si tiene más de una versión de python en su máquina, agregue el nombre del ejecutable de python requerido entre cmd / k y la ruta scipt de esta manera:

cmd /k python3 "C:\Users\<yourname>\Documents\your_scipt.py"
Paul Stevens
fuente
¡Gracias! Esto realmente me ayudó mucho. Soy un usuario de Linux y no pude resolver esto.
Michael Bruce
1

Además de inputy raw_input, también puede usar un whilebucle infinito , como este: while True: pass(Python 2.5 + / 3) owhile 1: pass (todas las versiones de Python 2/3). Sin embargo, esto podría usar potencia informática.

También puede ejecutar el programa desde la línea de comandos. Escriba pythonen la línea de comando (Mac OS X Terminal) y debería decir Python 3.?.?(Su versión de Python). No muestra su versión de Python, o dice python: command not found, busque cambiar los valores de RUTA (valores ambientales, enumerados anteriormente) / tipo C:\(Python folder\python.exe. Si eso es exitoso, escriba pythono C:\(Python installation)\python.exey el directorio completo de su programa.

usuario3836103
fuente
2
¡Esto es como dejar su auto en funcionamiento mientras toma un café o duerme! Peligroso en muchos niveles
Fandango68
1

Una respuesta muy tardía, pero creé un archivo Batch de Windows llamado que pythonbat.batcontiene lo siguiente:

python.exe %1
@echo off
echo.
pause

y luego se especifica pythonbat.batcomo el controlador predeterminado para los .pyarchivos.

Ahora, cuando hago doble clic en un .pyarchivo en el Explorador de archivos, se abre una nueva ventana de consola, ejecuta el script Python y luego se detiene (permanece abierto), hasta que presiono cualquier tecla ...

No se requieren cambios en ningún script de Python.

Todavía puedo abrir una ventana de consola y especificar python myscript.pysi quiero ...

(Acabo de notar que @maurizio ya publicó esta respuesta exacta)

roryhewitt
fuente
0

Si desea mantener la ventana cmd abierta Y estar en el directorio de archivos en ejecución, esto funciona en Windows 10:

cmd /k cd /d $(CURRENT_DIRECTORY) && python $(FULL_CURRENT_PATH)
Jackssn
fuente
0

Encontré que la solución en mi entorno py3 en win10 es simplemente ejecutar cmd o powershell como Administrador, y la salida se mantendría en la misma ventana de consola, cualquier otro tipo de comando python ejecutado por el usuario haría que python abriera una nueva ventana de consola.

Peter Tom
fuente
0

Solo puedes escribir

input()

al final de tu código

por lo tanto, cuando ejecute su script, esperará a que ingrese algo

{ENTER for example}
Zakaria EL MLILAH
fuente
-1

Puede abrir PowerShell y escribir "python". Después de importar Python, puede copiar y pegar el código fuente de su editor de texto favorito para ejecutar el código.

La ventana no se cierra.

Shiladitya Mukherjee
fuente
-2
  1. Ve aqui y descargue e instale Notepad ++
  2. Ve aqui y descargue e instale Python 2.7 no 3.
  3. Comience, ejecute Powershell. Introduzca la siguiente. [Environment]::SetEnvironmentVariable("Path", "$env:Path;C:\Python27", "User")
  4. Cierre Powershell y vuelva a abrirlo.
  5. Haga un directorio para sus programas. scripts mkdir
  6. Abra ese directorio de scripts de CD
  7. En Notepad ++, en un nuevo tipo de archivo: print "hello world"
  8. Guarde el archivo como hello.py
  9. Regrese a powershell y asegúrese de estar en el directorio correcto escribiendo dir. Debería ver su archivo hello.py allí.
  10. En el indicador de Powershell, escriba: python hello.py
oldmcf
fuente
-2

Un simple truco para mantener la ventana abierta:

counter = 0

While (True):

    If (counter == 0):

        # Code goes here

    counter += 1

El contador es para que el código no se repita.

Kaycee
fuente
-2

La forma más simple:

import time

#Your code here
time.sleep(60)
#end of code (and console shut down)

esto dejará el código activo durante 1 minuto y luego ciérrelo.

ACodeMaster
fuente
1
¿Cómo te atreves en serio? Tan innecesario De eso no se trata en absoluto esta pregunta y lo sabes.
Redgar Tech
-3

En Windows 10, inserte al principio esto:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

¡Extraño, pero funciona para mí! (Junto con input () al final, por supuesto)

Radim Akudo
fuente