Come mantenere aperta una finestra di output dello script Python?


193

Ho appena iniziato con Python. Quando eseguo un file di script Python su Windows, viene visualizzata la finestra di output ma scompare istantaneamente. Ho bisogno che rimanga lì in modo da poter analizzare il mio output. Come posso tenerlo aperto?


6
Un +1000 in ritardo. Sto usando Python come linguaggio di insegnamento per un amico che usa Windows, e non riuscivo a credere a quanti problemi (almeno basati sulla documentazione esistente) arrivassero a dove potremmo eseguire uno script e vedere l'output.
Cascabel,

2
basta trascinare / rilasciare lo script in una finestra cmd
JinSnow,

Si pensa che la finestra di output dovrebbe rimanere aperta per impostazione predefinita. Lo fa quando si esegue Python in Mac OS. Molto frustrante
Fandango68,

Ho intenzione di collegare un'altra domanda Mantieni aperta la Console di Windows dopo un errore Python a questo (a cui ho inviato una risposta per il debug con script Python drag & drop.)
akinuri

Vedi la risposta che @maurizio ha pubblicato di seguito: è l'unica che non ha bisogno che tu cambi i tuoi script Python.
roryhewitt,

Risposte:


157

Hai alcune opzioni:

  1. Esegui il programma da un terminale già aperto. Apri un prompt dei comandi e digita:

    python myscript.py

    Perché funzioni, hai bisogno dell'eseguibile python nel tuo percorso. Controlla come modificare le variabili di ambiente su Windows e aggiungi C:\PYTHON26(o qualunque altra directory in cui hai installato Python).

    Quando il programma termina, ti riporterà al prompt cmd invece di chiudere la finestra.

  2. Aggiungi il codice per attendere alla fine del tuo script. Per Python2, aggiungendo ...

    raw_input()

    ... alla fine dello script fa aspettare la Enterchiave. Questo metodo è fastidioso perché è necessario modificare lo script e ricordare di averlo rimosso al termine. Particolarmente fastidioso durante il test di script di altre persone. Per Python3, utilizzare input().

  3. Usa un editor che fa una pausa per te. Alcuni editor preparati per Python si metteranno automaticamente in pausa dopo l'esecuzione. Altri editor consentono di configurare la riga di comando utilizzata per eseguire il programma. Trovo particolarmente utile configurarlo come " python -i myscript.py" durante l'esecuzione. Ciò ti porta a una shell Python dopo la fine del programma, con l'ambiente del programma caricato, quindi puoi giocare ulteriormente con le variabili e chiamare funzioni e metodi.


8
+1 all'elemento 3. Uso Scite come editor Python e mantiene semplicemente l'output nella sua finestra di output. Questo è davvero utile perché puoi potenzialmente vedere l'output di più di una corsa in una singola finestra.
Joris Timmermans,

Sono in grado di vedere l'output eseguendolo da un terminale già aperto. Ma devo fornire l'indirizzo di script completo nel comando python? Può essere evitato? Quando uso il metodo raw_input (), mi dà NameError: il nome 'raw_input' non è definito. Puoi suggerire un editor che si interrompe automaticamente dopo l'esecuzione?
rohitmishra,

1
@movingahead: forse stai usando python 3? in Python 3 è stato rinominato input (). Ma per ora userei python 2.6, poiché a python 3 mancano importanti librerie di terze parti che non sono ancora state portate. (vedi altre domande su python 2vs3). Per quanto riguarda l'editor, non uso Windows, Notepad ++ ti consente di configurare il comando. Uso emacs che ha una versione per Windows, ma non l'ho mai usato.
nosklo,

@nosklo grazie !! Sì, sto usando Python 3. Ora sto facendo cose di base, quindi non dovrebbe essere un grosso problema. Proverò Notepad ++. Attualmente sto provando Pydev per Eclipse
rohitmishra il

@movingahead Uso Aptana studio. (pydev pre-confezionato). è molto buono. niente da dire.
v

52

cmd /kè il modo tipico di aprire qualsiasi applicazione console (non solo Python) con una finestra console che rimarrà dopo la chiusura dell'applicazione. Il modo più semplice in cui posso pensare di farlo è premere Win + R, digitare cmd /ke quindi trascinare e rilasciare lo script desiderato nella finestra di dialogo Esegui.


3
Risposta fantastica. Avresti dovuto avere questo.
Jagu,

1
Cordiali saluti per il comando python os.system che faresti os.system ("cmd / k" + myAppPath + "" + myFlagsString)
Jay

1
cmd /kè solo per Windows. Non posso fare a meno di un'alternativa per Mac, scusa.
martedì

Devi trascinare lo script, incluso il comando Python stesso? Scusa, posso fare un esempio, per favore? Sono nuovo, molto nuovo in Python sotto Windows.
Fandango68,

1
Questa risposta è stata la più semplice e fa esattamente quello di cui avevo bisogno in un ambiente Windows. Una volta eseguito il programma, la finestra del terminale rimane aperta.
Cameron Atkinson il

41

Avvia lo script dalla finestra cmd già aperta o alla fine dello script aggiungi qualcosa del genere, in Python 2:

 raw_input("Press enter to exit ;)")

Oppure, in Python 3:

input("Press enter to exit ;)")

1
"Qualsiasi tasto" non funzionerà, solo Invio lo farà (o Ctrl + D, a seconda di dove siamo).
Daniel Andersson,

1
@DanielAndersson sì, ha cambiato il testo
Anurag Uniyal,

55
Se ci pensate, è abbastanza profondo che solo "invio" vi permetterà di "uscire" ...
Gioele B

essere consapevoli del fatto che il terminale si chiuderà indipendentemente, se si verifica un'eccezione
johnson

19

Per tenere aperta la finestra in caso di eccezione (ancora, durante la stampa dell'eccezione)

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

Per mantenere la finestra aperta in ogni 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

Per Python3 dovrai usare input()al posto diraw_input() , e ovviamente adattare le printdichiarazioni.

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

Per mantenere la finestra aperta in ogni 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()

15

è possibile combinare le risposte prima: (per l'utente Notepad ++)

premere F5 per eseguire lo script corrente e digitare il comando:

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

in questo modo rimani in modalità interattiva dopo aver eseguito il tuo script python Notepad ++ e sei in grado di giocare con le tue variabili e così via :)


Questo rende un ottimo file batch di Windows, se si cambia $ (FULL_CURRENT_PATH) in un nome percorso Windows.
Noumenon,

Ho trovato molto più facile ottenere il pluggin PyNPP e assegnare un collegamento per eseguirlo (non dimenticare di disabilitare il precedente collegamento F5)
JinSnow

11

Crea un file batch di Windows con queste 2 righe:

python your-program.py

pause

2
O import os os.system("pause")alla fine del .pyfile
Spikatrix

4
Questa è l'unica risposta qui che è anche lontanamente corretta. Le risposte che richiedono corrompere ogni singolo script Python si potrà mai funzionare con raw_inputo altra immondizia sono semplicemente sbagliate. Entrambi i tipi vostro comando sulla riga di comando il modo in Python si aspetta che tu, o utilizzare il linguaggio batch che è stato fornito con MS-DOS per esattamente questo scopo dal agosto 1981 .
Kevin J. Chase,

1
ancora meglio, python %*usalo e impostalo come uno dei programmi "apri con" in modo da poter fare clic con il pulsante destro del mouse su un file .py per aprire una finestra di pausa o anche metterlo nella mia cartella Anaconda3 (in PERCORSO) come py_pause.bat così ora Posso correre py_pause my-prog.py all my argsdalla linea cmd
Brian

7

In python 2 puoi farlo con: raw_input ()

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

In python 3 puoi farlo con: input ()

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

Inoltre, puoi farlo con time.sleep (time)

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

7

Usando atexit, puoi mettere in pausa il programma proprio quando esce. Se un errore / eccezione è la ragione dell'uscita, si fermerà dopo aver stampato lo stacktrace.

import atexit

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

Nel mio programma ho inserito la chiamata atexit.registernella exceptclausola, in modo che si fermi solo se qualcosa è andato storto.

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.

5

Ho avuto un problema simile. Con Notepad ++ usavo il comando: C:\Python27\python.exe "$(FULL_CURRENT_PATH)"che chiudeva la finestra cmd immediatamente dopo la fine del codice.
Ora sto usando cmd /k c:\Python27\python.exe "$(FULL_CURRENT_PATH)"che mantiene aperta la finestra cmd.


1
È possibile che si desideri aggiungere "; C: \ Python27" alla fine della variabile di ambiente Path. In questo modo può essere abbreviato in 'cmd / k python -i "$ (FULL_CURRENT_PATH)"' - Esattamente quello che dice la risposta sopra più l'utile -i.
Enigma,

5

Su Python 3

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

Farà il trucco.


2

Per mantenere la finestra aperta sono d'accordo con Anurag e questo è quello che ho fatto per tenere le finestre aperte per brevi programmi di tipo di calcolo.

Ciò mostrerebbe solo un cursore senza testo:

raw_input() 

Il prossimo esempio ti darebbe un chiaro messaggio che il programma è stato fatto e non è in attesa di un altro prompt di input all'interno del programma:

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

Nota!
(1) In python 3, non esiste raw_input () , ma solo input () .
(2) Usa virgolette singole per indicare una stringa; altrimenti se si digita raddoppia attorno a qualcosa, come "raw_input ()", si pensa che sia una funzione, una variabile, ecc. e non un testo.

In questo prossimo esempio, uso le virgolette doppie e non funzionerà perché pensa che ci sia un'interruzione tra virgolette tra "la" e "funzione" anche se quando la leggi, la tua mente può avere perfettamente senso di essa:

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

Spero che questo aiuti gli altri che potrebbero iniziare e non hanno ancora capito come pensa il computer. Può volerci un po '. : O)


2

Se si desidera eseguire lo script da un collegamento sul desktop, fare clic con il pulsante destro del mouse sul file Python e selezionare Send to|Desktop (create shortcut). Quindi fare clic con il tasto destro del collegamento e selezionare Proprietà. Nella scheda Collegamento selezionare la casella di testo Target: e aggiungere cmd /k davanti al percorso e fare clic su OK. Il collegamento dovrebbe ora eseguire lo script senza chiudersi e non è necessarioinput('Hit enter to close')

Nota, se hai più di una versione di Python sul tuo computer, aggiungi il nome dell'eseguibile python richiesto tra cmd / k e il percorso scipt in questo modo:

cmd /k python3 "C:\Users\<yourname>\Documents\your_scipt.py"

Grazie! Questo in realtà mi ha aiutato molto. Sono un utente Linux e non sono riuscito a capirlo.
Michael Bruce,

1

Oltre a inpute raw_input, potresti anche usare un whileciclo infinito , come questo: while True: pass(Python 2.5 + / 3) o while 1: pass(tutte le versioni di Python 2/3). Questo potrebbe usare la potenza di calcolo, però.

È inoltre possibile eseguire il programma dalla riga di comando. Digita pythonnella riga di comando (Terminale Mac OS X) e dovrebbe essere indicato Python 3.?.?(versione Your Python) Non mostra la tua versione Python, o dice python: command not found, cerca di modificare i valori PATH (valori ambientali, elencati sopra) / tipo C:\(Python folder\python.exe. Se ciò ha esito positivo, digitare pythonoe C:\(Python installation)\python.exela directory completa del programma.


2
È come lasciare l'auto in funzione mentre vai a prendere un caffè o dormi! Pericoloso su molti livelli
Fandango68,

1

Una risposta molto tardiva, ma ho creato un file batch di Windows chiamato pythonbat.batcontenente quanto segue:

python.exe %1
@echo off
echo.
pause

e quindi specificato pythonbat.batcome gestore predefinito per i .pyfile.

Ora, quando faccio doppio clic su un .pyfile in Esplora file, apre una nuova finestra della console, esegue lo script Python e quindi fa una pausa (rimane aperta), finché non premo un tasto qualsiasi ...

Non sono necessarie modifiche agli script Python.

Posso ancora aprire una finestra della console e specificare python myscript.pyse voglio ...

(Ho appena notato che @maurizio ha già pubblicato questa risposta esatta)


0

Se vuoi rimanere cmd-window aperta ED essere nella directory dei file in esecuzione, funziona su Windows 10:

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

0

Ho trovato che la soluzione sul mio ambiente py3 su win10 è semplicemente eseguire cmd o powershell come amministratore, e l'output rimarrebbe nella stessa finestra della console, qualsiasi altro tipo di comando python eseguito dall'utente farebbe aprire a Python una nuova finestra della console.


0

Puoi solo scrivere

input()

alla fine del tuo codice

quindi quando esegui il tuo script ti aspetterà di inserire qualcosa

{ENTER for example}

-1

È possibile aprire PowerShell e digitare "python". Dopo che Python è stato importato, puoi copiare il codice sorgente dal tuo editor di testo preferito per eseguire il codice.

La finestra non si chiuderà.


-2
  1. Vai qui e scarica e installa Notepad ++
  2. Vai qui e scarica e installa Python 2.7 non 3.
  3. Avvia, avvia Powershell. Digita il seguente. [Environment]::SetEnvironmentVariable("Path", "$env:Path;C:\Python27", "User")
  4. Chiudi Powershell e riaprilo.
  5. Crea una directory per i tuoi programmi. script mkdir
  6. Apri gli script cd di quella directory
  7. In Notepad ++, in un nuovo tipo di file: print "hello world"
  8. Salva il file come hello.py
  9. Torna a PowerShell e assicurati di essere nella directory giusta digitando dir. Dovresti vedere il tuo file hello.py lì.
  10. Al prompt di Powershell digitare: python hello.py

-2

Un semplice trucco per tenere aperta la finestra:

counter = 0

While (True):

    If (counter == 0):

        # Code goes here

    counter += 1

Il contatore è quindi il codice non si ripeterà.


-2

Il modo più semplice:

import time

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

questo lascerà il codice attivo per 1 minuto e poi lo chiuderà.


1
Come osi seriamente. Così inutile. Non è affatto questa la questione e tu lo sai.
Redgar Tech

-3

Su Windows 10 inserire a questo inizio:

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

Strano, ma funziona per me! (Insieme a input () alla fine, ovviamente)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.