Uscire / terminare gli script Python (semplici esempi)

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.

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

quit()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+Calla 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-exceptblocco 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.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *