Wie kann ein Python-Skript-Ausgabefenster geöffnet bleiben?

191

Ich habe gerade mit Python angefangen. Wenn ich eine Python-Skriptdatei unter Windows ausführe, wird das Ausgabefenster angezeigt, aber sofort ausgeblendet. Ich brauche es, um dort zu bleiben, damit ich meine Ausgabe analysieren kann. Wie kann ich es offen halten?

Rohitmishra
quelle
6
Eine verspätete +1000. Ich verwende Python als Unterrichtssprache für einen Freund, der Windows verwendet, und ich konnte nicht glauben, wie schwierig es war (zumindest basierend auf der vorhandenen Dokumentation), dorthin zu gelangen, wo wir ein Skript ausführen und die Ausgabe sehen konnten.
Cascabel
2
Ziehen Sie Ihr Skript einfach per Drag & Drop in ein Cmd-Fenster
JinSnow,
Sie würden denken, das Ausgabefenster sollte standardmäßig geöffnet bleiben. Dies ist der Fall, wenn Python unter Mac OS ausgeführt wird. Sehr frustrierend
Fandango68
Ich werde eine andere Frage mit dieser verknüpfen. Halten Sie die Windows-Konsole nach einem Python-Fehler offen (auf die ich eine Antwort zum Debuggen mit Drag & Drop-Python-Skripten gepostet habe.)
akinuri
Sehen Sie sich die Antwort an, die @maurizio unten veröffentlicht hat - es ist die einzige, bei der Sie Ihre Python-Skripte nicht ändern müssen.
Roryhewitt

Antworten:

156

Sie haben einige Möglichkeiten:

  1. Führen Sie das Programm von einem bereits geöffneten Terminal aus. Öffnen Sie eine Eingabeaufforderung und geben Sie Folgendes ein:

    python myscript.py

    Damit dies funktioniert, benötigen Sie die ausführbare Python-Datei in Ihrem Pfad. Überprüfen Sie einfach, wie Sie Umgebungsvariablen unter Windows bearbeiten und hinzufügen C:\PYTHON26(oder in welches Verzeichnis Sie Python installiert haben).

    Wenn das Programm beendet ist, kehren Sie zur Eingabeaufforderung cmd zurück, anstatt das Fenster zu schließen.

  2. Fügen Sie Code hinzu, um am Ende Ihres Skripts zu warten. Fügen Sie für Python2 ...

    raw_input()

    ... am Ende des Skripts wartet es auf den EnterSchlüssel. Diese Methode ist ärgerlich, da Sie das Skript ändern und daran denken müssen, es zu entfernen, wenn Sie fertig sind. Besonders ärgerlich beim Testen der Skripte anderer Leute. Verwenden Sie für Python3 input().

  3. Verwenden Sie einen Editor, der für Sie pausiert. Einige für Python vorbereitete Editoren werden nach der Ausführung automatisch für Sie angehalten. Mit anderen Editoren können Sie die Befehlszeile konfigurieren, mit der Ihr Programm ausgeführt wird. Ich finde es besonders nützlich, es python -i myscript.pybeim Ausführen als " " zu konfigurieren . Dadurch gelangen Sie nach dem Ende des Programms zu einer Python-Shell, in der die Programmumgebung geladen ist, sodass Sie weiter mit den Variablen spielen und Funktionen und Methoden aufrufen können.

nosklo
quelle
8
+1 zu Punkt 3. Ich verwende Scite als Python-Editor und die Ausgabe bleibt einfach in einem eigenen Ausgabefenster. Dies ist sehr nützlich, da Sie möglicherweise die Ausgabe von mehr als einem Lauf in einem einzigen Fenster sehen können.
Joris Timmermans
Ich kann die Ausgabe sehen, indem ich sie von einem bereits geöffneten Terminal aus starte. Aber ich muss die vollständige Skriptadresse im Python-Befehl angeben? Kann das vermieden werden? Wenn ich die raw_input () -Methode verwende, erhalte ich den NamenError: Der Name 'raw_input' ist nicht definiert. Können Sie einen Editor vorschlagen, der nach der Ausführung automatisch angehalten wird?
Rohitmishra
1
@movingahead: Vielleicht benutzt du Python 3? In Python 3 wurde es in input () umbenannt. Aber ich würde vorerst Python 2.6 verwenden, da in Python 3 wichtige Bibliotheken von Drittanbietern fehlen, die noch nicht portiert wurden. (Siehe andere Fragen zu Python 2vs3). Über den Editor verwende ich kein Windows. Mit Notepad ++ können Sie den Befehl konfigurieren. Ich benutze Emacs mit einer Windows-Version, aber ich habe sie nie benutzt.
Nosklo
@nosklo danke !! Yah, ich benutze Python 3. Jetzt grundlegende Dinge zu tun, sollte also kein großes Problem sein. Ich werde Notepad ++ versuchen. Ich
probiere
@movingahead Ich benutze Aptana Studio. (Pydev vorverpackt). Es ist sehr gut. nichts zu sagen.
v.oddou
51

cmd /kist die typische Methode zum Öffnen einer Konsolenanwendung (nicht nur Python) mit einem Konsolenfenster, das nach dem Schließen der Anwendung erhalten bleibt. Der einfachste Weg, dies zu tun, besteht darin, Win + R zu drücken, cmd /kdas gewünschte Skript einzugeben und per Drag & Drop in das Dialogfeld "Ausführen" zu ziehen.

tzot
quelle
3
Fantastische Antwort. Du hättest das haben sollen.
Jagu
1
Nur zu Ihrer Information für den Befehl python os.system würden Sie os.system ausführen ("cmd / k" + myAppPath + "" + myFlagsString)
Jay
1
cmd /kist nur Windows. Ich kann mit einer Mac-Alternative nicht helfen, sorry.
Zot
Müssen Sie das Skript einschließlich des Python-Befehls selbst ziehen? Entschuldigung, kann ich bitte ein Beispiel haben? Ich bin neu, sehr neu in Python unter Windows.
Fandango68
1
Diese Antwort war die einfachste und macht genau das, was ich in einer Windows-Umgebung brauchte. Sobald das Programm ausgeführt wird, bleibt das Terminalfenster geöffnet.
CameronAtkinson
39

Starten Sie das Skript aus dem bereits geöffneten cmd-Fenster oder fügen Sie am Ende des Skripts in Python 2 Folgendes hinzu:

 raw_input("Press enter to exit ;)")

Oder in Python 3:

input("Press enter to exit ;)")
Anurag Uniyal
quelle
1
"Beliebige Taste" funktioniert nicht, nur die Eingabetaste (oder Strg + D, je nachdem, wo wir uns befinden).
Daniel Andersson
1
@ DanielAndersson yep, änderte den Text
Anurag Uniyal
54
Wenn Sie darüber nachdenken, ist es
Joel B
19

Um Ihr Fenster im Ausnahmefall offen zu halten (noch beim Drucken der Ausnahme)

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

So lassen Sie das Fenster auf jeden Fall offen:

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

Für Python3 werden Sie müssen verwenden input()anstelle vonraw_input() und natürlich passen die printAussagen.

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

So lassen Sie das Fenster auf jeden Fall offen:

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
quelle
14

Sie können die Antworten vorher kombinieren: (für Notepad ++ Benutzer)

Drücken Sie F5, um das aktuelle Skript auszuführen, und geben Sie den folgenden Befehl ein:

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

Auf diese Weise bleiben Sie nach dem Ausführen Ihres Notepad ++ - Python-Skripts im interaktiven Modus und können mit Ihren Variablen usw. herumspielen :)

feinmann
quelle
Dies ist eine großartige Windows-Batchdatei, wenn Sie $ (FULL_CURRENT_PATH) in einen Windows-Pfadnamen ändern.
Noumenon
Ich fand es viel einfacher, das Pluggin PyNPP zu bekommen und eine Verknüpfung zuzuweisen, um es auszuführen (vergessen Sie nicht, die vorherige F5-Verknüpfung zu deaktivieren)
JinSnow
11

Erstellen Sie eine Windows-Batchdatei mit den folgenden 2 Zeilen:

python your-program.py

pause
Maurizio
quelle
2
Oder import os os.system("pause")am Ende der .pyDatei
Spikatrix
4
Dies ist hier die einzige Antwort, die auch nur annähernd richtig ist. Antworten, bei denen jedes einzelne Python-Skript, mit dem Sie jemals ausgeführt werden, raw_inputoder anderer Müll beschädigt werden muss, sind einfach falsch. Geben Sie Ihren Befehl entweder so in die Befehlszeile ein, wie Python es von Ihnen erwartet, oder verwenden Sie die Batch-Sprache , die seit August 1981 genau zu diesem Zweck mit MS-DOS bereitgestellt wird .
Kevin J. Chase
1
Verwenden Sie python %*es noch besser und legen Sie es als eines der "Öffnen mit" -Programme fest, sodass Sie entweder mit der rechten Maustaste auf eine .py-Datei klicken können, um ein Pausenfenster zu öffnen, oder ich lege es jetzt auch in meinen Anaconda3-Ordner (in PATH) als py_pause.bat Ich kann py_pause my-prog.py all my argsvon der cmd Linie laufen
brian
7

In Python 2 können Sie dies tun mit: raw_input ()

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

In Python 3 können Sie dies tun mit: input ()

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

Sie können dies auch mit time.sleep (time) tun.

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

Mit atexitkönnen Sie das Programm direkt beim Beenden anhalten. Wenn ein Fehler / eine Ausnahme der Grund für das Beenden ist, wird es nach dem Drucken des Stacktraces angehalten.

import atexit

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

In meinem Programm habe ich den Aufruf atexit.registerin die exceptKlausel eingefügt, sodass er nur angehalten wird, wenn etwas schief gelaufen ist.

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
quelle
5

Ich hatte ein ähnliches Problem. Mit Notepad ++ habe ich den Befehl verwendet: C:\Python27\python.exe "$(FULL_CURRENT_PATH)"der das cmd-Fenster unmittelbar nach dem Beenden des Codes schloss.
Jetzt benutze ich, cmd /k c:\Python27\python.exe "$(FULL_CURRENT_PATH)"was das cmd-Fenster offen hält.

Matej
quelle
1
Möglicherweise möchten Sie am Ende Ihrer Umgebungsvariablen Path "; C: \ Python27" hinzufügen. Auf diese Weise kann es auf 'cmd / k python -i "$ (FULL_CURRENT_PATH)"' gekürzt werden - genau das, was die obige Antwort sagt, plus das nützliche -i.
Enigma
5

Auf Python 3

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

Wird den Trick machen.

Amila
quelle
2

Um nur das Fenster offen zu halten, stimme ich Anurag zu und dies habe ich getan, um meine Fenster für kurze kleine Berechnungsprogramme offen zu halten.

Dies würde nur einen Cursor ohne Text anzeigen:

raw_input() 

Dieses nächste Beispiel würde Ihnen eine klare Nachricht geben, dass das Programm fertig ist und nicht auf eine andere Eingabeaufforderung innerhalb des Programms wartet:

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

Hinweis!
(1) In Python 3 gibt es keine raw_input () , nur input () .
(2) Verwenden Sie einfache Anführungszeichen, um eine Zeichenfolge anzugeben. Andernfalls wird bei der Eingabe von Doubles um etwas wie "raw_input ()" angenommen, dass es sich um eine Funktion, eine Variable usw. und nicht um Text handelt.

In diesem nächsten Beispiel verwende ich doppelte Anführungszeichen und es funktioniert nicht , weil es denkt, dass die Anführungszeichen zwischen "the" und "function" unterbrochen sind, obwohl Ihr eigener Verstand beim Lesen einen vollkommenen Sinn daraus ziehen kann:

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

Hoffentlich hilft dies anderen, die vielleicht anfangen und noch nicht herausgefunden haben, wie der Computer denkt. Es kann eine Weile dauern. :Ö)

Herr Whybull
quelle
2

Wenn Sie Ihr Skript über eine Desktopverknüpfung ausführen möchten, klicken Sie mit der rechten Maustaste auf Ihre Python-Datei und wählen Sie Send to|Desktop (create shortcut). Klicken Sie dann mit der rechten Maustaste auf die Verknüpfung und wählen Sie Eigenschaften. Wählen Sie auf der Registerkarte Verknüpfung das Textfeld Ziel: aus, fügen Sie es cmd /k vor dem Pfad hinzu und klicken Sie auf OK. Die Verknüpfung sollte jetzt Ihr Skript ausführen, ohne es zu schließen, und Sie benötigen das nichtinput('Hit enter to close')

Hinweis: Wenn Sie mehr als eine Python-Version auf Ihrem Computer haben, fügen Sie den Namen der erforderlichen ausführbaren Python-Datei zwischen cmd / k und dem Scipt-Pfad wie folgt hinzu:

cmd /k python3 "C:\Users\<yourname>\Documents\your_scipt.py"
Paul Stevens
quelle
Vielen Dank! Das hat mir sehr geholfen. Ich bin ein Linux-Benutzer und konnte dies nicht herausfinden.
Michael Bruce
1

Abgesehen von inputund raw_inputkönnen Sie auch eine whileEndlosschleife wie die folgende verwenden: while True: pass(Python 2.5 + / 3) oder while 1: pass(alle Versionen von Python 2/3). Dies könnte jedoch Rechenleistung verbrauchen.

Sie können das Programm auch über die Befehlszeile ausführen. Geben Sie pythonin die Befehlszeile (Mac OS X Terminal) ein und es sollte Python 3.?.?(Ihre Python-Version) angezeigt werden. Es zeigt nicht Ihre Python-Version an oder prüft python: command not found, ob sich die PATH-Werte (Umgebungswerte, oben aufgeführt) / type ändern C:\(Python folder\python.exe. Wenn dies erfolgreich ist, geben Sie pythonoder C:\(Python installation)\python.exeund das vollständige Verzeichnis Ihres Programms ein.

user3836103
quelle
1
Das ist, als würde man sein Auto laufen lassen, während man einen Kaffee trinkt oder schläft! Auf vielen Ebenen gefährlich
Fandango68
1

Eine sehr verspätete Antwort, aber ich habe eine Windows-Batch-Datei pythonbat.batmit dem folgenden Namen erstellt:

python.exe %1
@echo off
echo.
pause

und dann pythonbat.batals Standardhandler für .pyDateien angegeben.

Wenn ich jetzt .pyim Datei-Explorer auf eine Datei doppelklicke, wird ein neues Konsolenfenster geöffnet, das Python-Skript ausgeführt und dann angehalten (bleibt geöffnet), bis ich eine beliebige Taste drücke ...

Keine Änderungen an Python-Skripten erforderlich.

Ich kann immer noch ein Konsolenfenster öffnen und angeben, python myscript.pyob ich ...

(Ich habe gerade bemerkt, dass @maurizio diese genaue Antwort bereits gepostet hat)

Roryhewitt
quelle
0

Sie können PowerShell öffnen und "python" eingeben. Nachdem Python importiert wurde, können Sie den Quellcode aus Ihrem bevorzugten Texteditor kopieren und einfügen, um den Code auszuführen.

Das Fenster wird nicht geschlossen.

Shiladitya Mukherjee
quelle
0

Wenn Sie das cmd-Fenster geöffnet lassen UND sich im Verzeichnis der laufenden Datei befinden möchten, funktioniert dies unter Windows 10:

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

Ich habe festgestellt, dass die Lösung in meiner py3-Umgebung bei win10 nur cmd oder Powershell als Administrator ausführt und die Ausgabe im selben Konsolenfenster bleibt. Jede andere Art von Benutzer-Python-Befehl führt dazu, dass Python ein neues Konsolenfenster öffnet.

Peter Tom
quelle
-1
  1. Geh hierher und laden Sie Notepad ++ herunter und installieren Sie es
  2. Gehen Sie hier und laden Sie Python 2.7 statt 3 herunter und installieren Sie es.
  3. Starten Sie Powershell. Geben Sie das folgende ein. [Environment]::SetEnvironmentVariable("Path", "$env:Path;C:\Python27", "User")
  4. Schließen Sie Powershell und öffnen Sie es erneut.
  5. Erstellen Sie ein Verzeichnis für Ihre Programme. mkdir-Skripte
  6. Öffnen Sie diese Verzeichnis-CD-Skripte
  7. In Notepad ++ in einem neuen Dateityp: print "hello world"
  8. Speichern Sie die Datei als hello.py
  9. Kehren Sie zu Powershell zurück und stellen Sie sicher, dass Sie sich im richtigen Verzeichnis befinden, indem Sie dir eingeben. Sie sollten dort Ihre Datei hello.py sehen.
  10. Geben Sie an der Powershell-Eingabeaufforderung Folgendes ein: python hello.py
oldmcf
quelle
-1

Ein einfacher Hack, um das Fenster offen zu halten:

counter = 0

While (True):

    If (counter == 0):

        # Code goes here

    counter += 1

Der Zähler ist so, dass sich der Code nicht wiederholt.

Kaycee
quelle
-1

Der einfachste Weg:

import time

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

Dadurch bleibt der Code 1 Minute lang geöffnet und wird dann geschlossen.

ACodeMaster
quelle
1
Wie kannst du es ernsthaft wagen? Also unnötig. Darum geht es in dieser Frage überhaupt nicht, und Sie wissen es.
Redgar Tech
-2

Unter Windows 10 fügen Sie zu Beginn Folgendes ein:

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

Seltsam, aber es funktioniert bei mir! (Zusammen mit input () am Ende natürlich)

Radim Akudo
quelle