Oggi, ci immergeremo nel tema di uscire/terminare gli script Python! Prima di iniziare, dovresti avere una conoscenza di base di cosa sia Python e alcune conoscenze di base sul suo utilizzo.
Puoi usare l’IDE di tua scelta, ma userò il pacchetto Linux Subsystem for Windows (WSL) di Microsoft questa volta. Per ulteriori informazioni su questo e su come abilitarlo su Windows 10, vai qui.
Sommario
Perché Python esce automaticamente da uno script quando è fatto?,
Il modo in cui Python esegue un blocco di codice lo fa eseguire ogni riga in ordine, controllando le dipendenze da importare, leggendo definizioni e classi da memorizzare in memoria ed eseguendo pezzi di codice in ordine consentendo loop e richiami alle definizioni e alle classi definite.
Quando l’interprete Python raggiunge la fine del file (EOF), nota che non può leggere più dati dalla sorgente, sia che si tratti dell’input dell’utente attraverso un IDE o della lettura da un file. Per dimostrare, proviamo a ottenere l’input dell’utente e interrompere l’interprete nel mezzo dell’esecuzione!,
Innanzitutto, dal tuo terminale bash nel tuo PowerShell apri un nuovo file chiamato ” input.,n incollare il seguente shell facendo clic destro sulla finestra di PowerShell
name=input("Don"t type anything!\n")print("Hi,",name,"!")
Ora, premere CTRL+X
per salvare e chiudere la finestra di nano e nella shell tipo:
$ python3 input.pyDon"t type anything!
E premere CTRL+D
per terminare il programma mentre è in attesa dell’input dell’utente
Traceback (most recent call last):File "input.py", line 1, in name=input("Don"t type anything!")EOFError
EOFError
eccezione ci dice che l’interprete Python ha colpito la fine del file (EOF) condizione prima di completare l’esecuzione del codice, in quanto l’utente ha inserito nessun input di dati.,
Quando Python raggiunge la condizione EOF nello stesso momento in cui ha eseguito tutto il codice senza generare eccezioni, il che è un modo in cui Python può uscire “con grazia.”
Rileva script exit
Se vogliamo dire quando un programma Python esce senza lanciare un’eccezione, possiamo usare il modulo Python incorporatoatexit
.
Ilatexit
gestisce tutto ciò che vogliamo che il programma faccia quando esce ed è tipicamente usato per fare pulizia del programma prima che il processo del programma termini
Per sperimentare con atexit, modifichiamo il nostro input.,py esempio per stampare un messaggio all’uscita del programma. Aprire il input.py di nuovo il file e sostituire il testo con questo
import atexitatexit.register(print,"Program exited successfully!")name=input("What"s your name?\n")print("Hi,",name,"!")
scrivi il tuo nome, e quando si preme invio si dovrebbe ottenere:
What"s your name?ExampleHi, Example !Program exited successfully!
da Notare come l’uscita di testo che appare alla fine dell’uscita, non importa dove posizionare il atexit
chiamata, e come se sostituiamo il atexit
chiamata con un semplice print()
, si ottiene l’uscita di testo dove l’ print()
tutto è stato fatto, piuttosto che dove il codice di chiusura.,
Program exited successfully!What"s your name?ExampleHi, Example !
Grazioso uscita
Ci sono diversi modi per uscire da un Programma in Python che non comporta la generazione di un’eccezione; il primo era di andare a provare è il quit()
È possibile utilizzare il comando bash echo $?
per ottenere il codice di uscita dell’interprete Python.,
Si può anche definire il tipo di codice che l’interprete deve uscire dalla consegna quit()
un intero argomento meno di 256
exit()
ha la stessa funzionalità è un alias per il quit()
Né quit()
né exit()
sono considerate una buona pratica, in quanto entrambi richiedono il site
modulo, che è pensato per essere utilizzato interattivi per interpreti e non in programmi., Per i nostri programmi, dovremmo usare qualcosa come sys.exit
Si noti che è necessario importare esplicitamente un modulo da chiamare exit()
, questo potrebbe sembrare non un miglioramento, ma garantisce che il modulo necessario sia caricato perché non è una buona ipotesi site
verrà caricato in fase di runtime., Se non si desidera importare i moduli aggiuntivi, possiamo fare quello che exit()
quit()
e sys.exit()
stanno facendo dietro le quinte e raise SystemExit
Uscire con messaggi di errore
che Cosa succede se abbiamo male input da un utente?, Guardiamo indietro alla nostra input.py
script, e aggiungere la capacità di gestire male l’input dall’utente (CTRL+D
per passare un carattere di EOF)
try
istruzione indica Python per provare il codice all’interno dell’istruzione e passare qualche eccezione per il except
dichiarazione prima di uscire.
Uscire senza errore
Cosa succede se l’utente consegna al programma un errore ma non si desidera che il codice stampi un errore o che si esegua una sorta di gestione degli errori per ridurre al minimo l’impatto dell’utente?,
Si può aggiungere un finally
istruzione che ci permette di eseguire il codice, dopo che abbiamo fatto la nostra gestione degli errori nel catch
si Noti che l’utente non avrebbe mai saputo di un EOFError
si è verificato, questo può essere usato per passare i valori di default in caso di scarsa ingresso o argomenti.,
Esci e rilascia le tue risorse
Generalmente, Python rilascia automaticamente tutte le risorse che hai chiamato nel tuo programma quando esce, ma per alcuni processi, è buona norma racchiudere alcune risorse limitate in un bloccowith
.
Spesso lo vedrai nelle chiamateopen()
, dove il mancato rilascio corretto del file potrebbe causare problemi con la lettura o la scrittura sul file in seguito.
Il blocco with
rilascia automaticamente tutte le risorse richieste al suo interno., Se volessimo più esplicitamente assicurarsi che il file è stato chiuso, si può usare il tag atexit.register()
comando per chiamare close()
$ nano openfile.pyimport atexitfile=open("testfile.txt","w")file.write("let"s write some text!\n")atexit.register(file.close)
Se le risorse sono chiamati senza l’utilizzo di un with
blocco, assicurarsi esplicitamente rilasciarli in un atexit
comando.
Esci dopo un tempo
Se siamo preoccupati che il nostro programma non possa mai terminare normalmente, possiamo usare il modulomultiprocessing
di Python per assicurarci che il nostro programma terminerà.,
Si noti come il processo non è riuscito a completare quando alla funzione è stato detto di attendere 7 secondi ma completato e stampato ciò che doveva quando è stato detto di attendere 0 secondi!
Uscire usando un’istruzione return
Se abbiamo una sezione di codice che vogliamo usare per terminare l’intero programma, invece di lasciare che l’istruzionebreak
continui il codice al di fuori del ciclo, possiamo usarereturn sys.exit()
per uscire completamente dal codice.,
Uscita nel mezzo di una funzione
Se non si desidera utilizzare un’istruzione return, possiamo ancora chiamare il sys.exit()
per chiudere il nostro programma e fornire un return
in un altro ramo. Usiamo il nostro codice da break.py di nuovo.
Esci quando le condizioni sono soddisfatte
Se abbiamo un ciclo nel nostro codice Python e vogliamo assicurarci che il codice possa uscire se incontra un problema, possiamo usare un flag che può controllare per terminare il programma.,
Exit on keypress
Se vogliamo tenere il nostro programma aperto nella console fino a premere un tasto, possiamo usare un non legato input()
per chiuderlo.
$ nano holdopen.pyinput("Press enter to continue")$ python3 holdopen.pyPress enter to continue$
Possiamo anche passareCTRL+C
alla console per dare a Python un carattereKeyboardInterrupt
. Possiamo persino gestire l’eccezioneKeyboardInterrupt
come abbiamo già gestito le eccezioni.,
Esci da un programma multithread
L’uscita da un programma multithread è leggermente più coinvolta, poiché un semplice sys.exit()
viene chiamato dal thread che uscirà solo dal thread corrente., Lo “sporco” di un modo per farlo è quello di utilizzare os._exit()
Come potete vedere, il programma non stampa il resto del programma, prima dell’uscita, questo è il motivo per cui os._exit()
in genere è riservata per ultima risorsa, e chiamare Thread.join()
dal thread principale è il metodo preferito per la chiusura di un programma multithread.,
Fine senza sys uscita
Sys.exit()
è solo uno dei diversi modi in cui possiamo uscire i nostri programmi in Python, che cosa sys.exit()
non è raise SystemExit
così si può facilmente utilizzare built-in Python eccezione o crearne uno nostro!
Possiamo anche usare os._exit()
per dire al sistema host di uccidere il processo python, anche se questo non fa atexit
pulizia.,
Esci su eccezione
Se vogliamo uscire su qualsiasi eccezione senza alcuna gestione, possiamo usare il nostro try-except
blocco per eseguire os._exit()
.
Esci e riavvia
Infine, esploreremo cosa facciamo per uscire da Python e riavviare il programma, che è utile in molti casi.
Spero che il tutorial sia utile. Continua a tornare.
Grazie.,
Fondatore di LikeGeeks. Sto lavorando come amministratore di sistema Linux dal 2010. Sono responsabile della manutenzione, della protezione e della risoluzione dei problemi dei server Linux per più client in tutto il mondo. Mi piace scrivere script shell e Python per automatizzare il mio lavoro.