Comment garder une fenêtre de sortie de script Python ouverte?

193

Je viens de commencer avec Python. Lorsque j'exécute un fichier de script python sous Windows, la fenêtre de sortie apparaît mais disparaît instantanément. J'en ai besoin pour y rester pour pouvoir analyser ma sortie. Comment puis-je le garder ouvert?

rohitmishra
la source
6
Un +1000 tardif. J'utilise python comme langage d'enseignement pour un ami qui utilise Windows, et je ne pouvais pas croire à quel point il était difficile (du moins sur la base de la documentation existante) d'arriver à l'endroit où nous pourrions exécuter un script et voir le résultat.
Cascabel le
2
il suffit de glisser / déposer votre script dans une fenêtre cmd
JinSnow
On pourrait penser que la fenêtre de sortie doit rester ouverte par défaut. C'est le cas lors de l'exécution de Python sous Mac OS. Très frustrant
Fandango68
Je vais lier une autre question Garder la console Windows ouverte après une erreur Python à celle-ci (dont j'ai publié une réponse pour le débogage avec des scripts python glisser-déposer.)
akinuri
Voir la réponse que @maurizio a postée ci-dessous - c'est la seule qui n'a pas besoin de vous pour changer vos scripts python.
roryhewitt

Réponses:

157

Vous avez quelques options:

  1. Exécutez le programme à partir d'un terminal déjà ouvert. Ouvrez une invite de commande et tapez:

    python myscript.py

    Pour que cela fonctionne, vous avez besoin de l'exécutable python dans votre chemin. Vérifiez simplement comment modifier les variables d'environnement sous Windows et ajoutez C:\PYTHON26(ou le répertoire dans lequel vous avez installé python).

    Lorsque le programme se termine, il vous ramènera à l' invite cmd au lieu de fermer la fenêtre.

  2. Ajoutez du code pour attendre à la fin de votre script. Pour Python2, ajouter ...

    raw_input()

    ... à la fin du script, il attend la Enterclé. Cette méthode est ennuyeuse car vous devez modifier le script et ne pas oublier de le supprimer lorsque vous avez terminé. Particulièrement ennuyeux lors du test des scripts d'autres personnes. Pour Python3, utilisez input().

  3. Utilisez un éditeur qui s'arrête pour vous. Certains éditeurs préparés pour python se mettront automatiquement en pause après l'exécution. D'autres éditeurs vous permettent de configurer la ligne de commande qu'il utilise pour exécuter votre programme. Je trouve particulièrement utile de le configurer comme " python -i myscript.py" lors de l'exécution. Cela vous amène à un shell python après la fin du programme, avec l'environnement du programme chargé, vous pouvez donc continuer à jouer avec les variables et appeler des fonctions et des méthodes.

nosklo
la source
8
+1 à l'élément 3. J'utilise Scite comme éditeur Python et il garde simplement la sortie dans sa propre fenêtre de sortie. Ceci est vraiment utile car vous pouvez potentiellement voir la sortie de plus d'une exécution dans une seule fenêtre.
Joris Timmermans
Je peux voir la sortie en l'exécutant à partir d'un terminal déjà ouvert. Mais je dois donner l'adresse complète du script dans la commande python? Cela peut-il être évité? Quand j'utilise la méthode raw_input (), cela me donne NameError: le nom 'raw_input' n'est pas défini. Pouvez-vous suggérer un éditeur qui s'arrête automatiquement après l'exécution?
rohitmishra
1
@movingahead: vous utilisez peut-être python 3? en python 3, il a été renommé input (). Mais j'utiliserais python 2.6 pour le moment, car python 3 manque de bibliothèques tierces importantes qui n'ont pas encore été portées. (voir les autres questions sur python 2vs3). A propos de l'éditeur, je n'utilise pas de fenêtres, notepad ++ vous permet de configurer la commande. J'utilise emacs qui a une version Windows, mais je ne l'ai jamais utilisé.
nosklo
@nosklo merci !! Yah J'utilise Python 3. Faire des choses basiques maintenant ne devrait donc pas être un gros problème. J'essaierai notepad ++. J'essaye actuellement Pydev pour Eclipse
rohitmishra
@movingahead J'utilise le studio Aptana. (pydev pré-emballé). c'est vraiment bien. rien à dire.
v.oddou
52

cmd /kest le moyen typique d'ouvrir n'importe quelle application console (pas seulement Python) avec une fenêtre console qui restera après la fermeture de l'application. La façon la plus simple de le faire est d'appuyer sur Win + R, tapez cmd /kpuis faites glisser et déposez le script que vous souhaitez dans la boîte de dialogue Exécuter.

tzot
la source
3
Réponse fantastique. Tu aurais dû avoir ça.
Jagu
1
Juste pour info pour la commande python os.system que vous feriez os.system ("cmd / k" + myAppPath + "" + myFlagsString)
Jay
1
cmd /kest Windows uniquement. Je ne peux pas vous aider avec une alternative Mac, désolé.
tzot
Devez-vous faire glisser le script, y compris la commande Python elle-même? Pardon, puis-je avoir un exemple s'il vous plaît? Je suis nouveau, très nouveau sur Python sous Windows.
Fandango68
1
Cette réponse était la plus simple et fait exactement ce dont j'avais besoin dans un environnement Windows. Une fois le programme exécuté, la fenêtre du terminal reste ouverte.
CameronAtkinson
41

Démarrez le script à partir de la fenêtre cmd déjà ouverte ou à la fin du script, ajoutez quelque chose comme ceci, dans Python 2:

 raw_input("Press enter to exit ;)")

Ou, en Python 3:

input("Press enter to exit ;)")
Anurag Uniyal
la source
1
"N'importe quelle touche" ne fonctionnera pas, seule Entrée fonctionnera (ou Ctrl + D, selon l'endroit où nous sommes).
Daniel Andersson
1
@DanielAndersson ouais, a changé le texte
Anurag Uniyal
55
Si vous y réfléchissez, c'est un peu profond que seul "entrer" vous permettra de "sortir" ...
Joel B
sachez que le terminal se fermera peu importe, si une exception se produit
johnson le
19

Pour garder votre fenêtre ouverte en cas d'exception (encore, lors de l'impression de l'exception)

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() 

Pour garder la fenêtre ouverte dans tous les cas:

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

Pour Python3, vous devrez utiliser input()à la place deraw_input() , et bien sûr adapter les printinstructions.

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() 

Pour garder la fenêtre ouverte dans tous les cas:

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
la source
15

vous pouvez combiner les réponses avant: (pour Notepad ++ User)

appuyez sur F5 pour exécuter le script actuel et tapez la commande:

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

de cette façon, vous restez en mode interactif après avoir exécuté votre script python Notepad ++ et vous pouvez jouer avec vos variables et ainsi de suite :)

Feinmann
la source
Cela fait un excellent fichier de commandes Windows, si vous remplacez $ (FULL_CURRENT_PATH) par un nom de chemin Windows.
Noumenon le
J'ai trouvé beaucoup plus facile d'obtenir le pluggin PyNPP et d'attribuer un raccourci pour l'exécuter (n'oubliez pas de désactiver le raccourci F5 précédent)
JinSnow
11

Créez un fichier batch Windows avec ces 2 lignes:

python your-program.py

pause
Maurizio
la source
2
Ou import os os.system("pause")à la fin du .pyfichier
Spikatrix
4
C'est la seule réponse ici qui soit même à distance correcte. Les réponses qui nécessitent corrompant chaque script Python unique que vous aurez jamais courir avec raw_inputou autres déchets sont tout simplement faux. Tapez votre commande sur la ligne de commande comme Python l'attend, ou utilisez le langage de traitement par lots fourni avec MS-DOS exactement à cette fin depuis août 1981 .
Kevin
1
encore mieux, utilisez-le python %*et définissez-le comme l'un des programmes "ouvrir avec" afin que vous puissiez soit cliquer avec le bouton droit sur un fichier .py pour ouvrir une fenêtre en pause, soit le mettre également dans mon dossier Anaconda3 (dans PATH) en tant que py_pause.bat donc maintenant Je peux courir à py_pause my-prog.py all my argspartir de la ligne cmd
brian
7

En python 2, vous pouvez le faire avec: raw_input ()

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

En python 3, vous pouvez le faire avec: input ()

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

En outre, vous pouvez le faire avec time.sleep (time)

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

En utilisant atexit, vous pouvez mettre le programme en pause dès sa sortie. Si une erreur / exception est la raison de la sortie, elle s'arrêtera après l'impression du stacktrace.

import atexit

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

Dans mon programme, j'ai mis l'appel atexit.registerdans l' exceptarticle, de sorte qu'il ne s'arrête qu'en cas de problème.

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
la source
5

J'avais un problème similaire. Avec Notepad ++, j'avais l'habitude d'utiliser la commande: C:\Python27\python.exe "$(FULL_CURRENT_PATH)"qui fermait la fenêtre cmd immédiatement après la fin du code.
Maintenant, j'utilise cmd /k c:\Python27\python.exe "$(FULL_CURRENT_PATH)"ce qui garde la fenêtre cmd ouverte.

Matej
la source
1
Vous pouvez ajouter "; C: \ Python27" à la fin de votre variable d'environnement Path. De cette façon, il peut être raccourci en 'cmd / k python -i "$ (FULL_CURRENT_PATH)"' - Exactement ce que dit la réponse ci-dessus plus l'utile -i.
Enigma
5

Sur Python 3

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

Fera l'affaire.

Amila
la source
2

Pour simplement garder la fenêtre ouverte, je suis d'accord avec Anurag et c'est ce que j'ai fait pour garder mes fenêtres ouvertes pour de petits programmes de type calcul.

Cela afficherait simplement un curseur sans texte:

raw_input() 

Cet exemple suivant vous donnerait un message clair indiquant que le programme est terminé et n'attend pas une autre invite d'entrée dans le programme:

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

Remarque!
(1) En python 3, il n'y a pas de raw_input () , juste input () .
(2) Utilisez des guillemets simples pour indiquer une chaîne; sinon, si vous tapez des doubles autour de quelque chose, comme "raw_input ()", il pensera que c'est une fonction, une variable, etc., et non du texte.

Dans cet exemple suivant, j'utilise des guillemets doubles et cela ne fonctionnera pas car il pense qu'il y a une rupture entre les guillemets entre "la" et la "fonction" même si lorsque vous le lisez, votre propre esprit peut le comprendre parfaitement:

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

Espérons que cela aide d'autres personnes qui sont peut-être débutantes et qui n'ont toujours pas compris comment pense l'ordinateur. Cela peut prendre un certain temps. : o)

Monsieur Whybull
la source
2

Si vous souhaitez exécuter votre script à partir d'un raccourci sur le bureau, cliquez avec le bouton droit sur votre fichier python et sélectionnez Send to|Desktop (create shortcut). Cliquez ensuite avec le bouton droit sur le raccourci et sélectionnez Propriétés. Dans l'onglet Raccourci, sélectionnez la zone de texte Cible: et ajoutez cmd /k devant le chemin et cliquez sur OK. Le raccourci devrait maintenant exécuter votre script sans se fermer et vous n'avez pas besoin duinput('Hit enter to close')

Notez que si vous avez plus d'une version de python sur votre machine, ajoutez le nom de l'exécutable python requis entre cmd / k et le chemin scipt comme ceci:

cmd /k python3 "C:\Users\<yourname>\Documents\your_scipt.py"
Paul Stevens
la source
Merci! Cela m'a beaucoup aidé. Je suis un utilisateur Linux et je n'ai pas pu comprendre cela.
Michael Bruce
1

En dehors de inputet raw_input, vous pouvez également utiliser une whileboucle infinie , comme ceci: while True: pass(Python 2.5 + / 3) ou while 1: pass(toutes les versions de Python 2/3). Cela pourrait cependant utiliser la puissance de calcul.

Vous pouvez également exécuter le programme à partir de la ligne de commande. Tapez pythondans la ligne de commande (Terminal Mac OS X) et il devrait dire Python 3.?.?(Votre version de Python) Il n'affiche pas votre version de Python, ou dit python: command not found, regardez dans le changement des valeurs PATH (valeurs d'environnement, énumérées ci-dessus) / type C:\(Python folder\python.exe. Si cela réussit, tapez pythonou C:\(Python installation)\python.exeet le répertoire complet de votre programme.

user3836103
la source
2
C'est comme laisser votre voiture tourner pendant que vous allez prendre un café ou dormir! Dangereux à plusieurs niveaux
Fandango68
1

Une réponse très tardive, mais j'ai créé un fichier Windows Batch appelé pythonbat.batcontenant les éléments suivants:

python.exe %1
@echo off
echo.
pause

puis spécifié pythonbat.batcomme gestionnaire par défaut pour les .pyfichiers.

Maintenant, lorsque je double-clique sur un .pyfichier dans l'Explorateur de fichiers, il ouvre une nouvelle fenêtre de console, exécute le script Python puis s'arrête (reste ouvert), jusqu'à ce que j'appuie sur une touche ...

Aucune modification requise pour les scripts Python.

Je peux toujours ouvrir une fenêtre de console et spécifier python myscript.pysi je veux ...

(Je viens de remarquer que @maurizio a déjà posté cette réponse exacte)

roryhewitt
la source
0

Si vous voulez garder cmd-window ouverte ET être dans le répertoire des fichiers en cours d'exécution, cela fonctionne sous Windows 10:

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

J'ai trouvé que la solution sur mon environnement py3 à win10 est simplement d'exécuter cmd ou powershell en tant qu'administrateur, et la sortie resterait dans la même fenêtre de console, tout autre type de commande python exécutée par l'utilisateur entraînerait python d'ouvrir une nouvelle fenêtre de console.

peter tom
la source
0

Tu peux juste écrire

input()

à la fin de votre code

Par conséquent, lorsque vous exécutez votre script, il attendra que vous saisissiez quelque chose

{ENTER for example}
Zakaria EL MLILAH
la source
-1

Vous pouvez ouvrir PowerShell et taper "python". Une fois Python importé, vous pouvez copier-coller le code source de votre éditeur de texte préféré pour exécuter le code.

La fenêtre ne se ferme pas.

Shiladitya Mukherjee
la source
-2
  1. Allez ici et téléchargez et installez Notepad ++
  2. Allez ici et téléchargez et installez Python 2.7 pas 3.
  3. Démarrez, exécutez Powershell. Entrez ce qui suit. [Environment]::SetEnvironmentVariable("Path", "$env:Path;C:\Python27", "User")
  4. Fermez Powershell et rouvrez-le.
  5. Créez un répertoire pour vos programmes. scripts mkdir
  6. Ouvrez ce répertoire de scripts cd
  7. Dans Notepad ++, dans un nouveau type de fichier: print "hello world"
  8. Enregistrez le fichier sous hello.py
  9. Revenez à PowerShell et assurez-vous que vous êtes dans le bon répertoire en tapant dir. Vous devriez y voir votre fichier hello.py.
  10. À l'invite Powershell, tapez: python hello.py
oldmcf
la source
-2

Un simple hack pour garder la fenêtre ouverte:

counter = 0

While (True):

    If (counter == 0):

        # Code goes here

    counter += 1

Le compteur est que le code ne se répète pas.

Kaycee
la source
-2

Le moyen le plus simple:

import time

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

cela laissera le code pendant 1 minute puis le fermera.

ACodeMaster
la source
1
Comment osez-vous sérieusement. Tellement inutile. Ce n'est pas du tout l'objet de cette question et vous le savez.
Redgar Tech
-3

Sur Windows 10, insérez au début ceci:

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

Étrange, mais ça marche pour moi! (Avec input () à la fin, bien sûr)

Radim Akudo
la source