vandaag duiken we in het onderwerp van Python-scripts afsluiten/beëindigen! Voordat we beginnen, moet je een basiskennis hebben van wat Python is en wat basiskennis over het gebruik ervan.
u kunt de IDE van uw keuze gebruiken, maar Ik zal dit keer Microsoft ‘ s Linux Subsystem for Windows (WSL) pakket gebruiken. Voor meer informatie over dat en hoe u het inschakelen op Windows 10, ga hier.
inhoudsopgave
waarom sluit Python automatisch een script af als het klaar is?,
De manier waarop Python een codeblok uitvoert, zorgt ervoor dat het elke regel in volgorde uitvoert, afhankelijkheden controleert om te importeren, definities en klassen leest om op te slaan in het geheugen, en stukjes code uitvoert in volgorde die loops en oproepen naar de gedefinieerde definities en klassen mogelijk maken.
wanneer de Python-interpreter het einde van het bestand (EOF) bereikt, merkt het dat het geen gegevens meer van de bron kan lezen, of dat nu de input van de gebruiker is via een IDE of het lezen van een bestand. Om te demonstreren, laten we proberen om de gebruiker input te krijgen en onderbreken de interpreter in het midden van de uitvoering!,
open eerst vanuit je bash terminal in je PowerShell een nieuw bestand met de naam “input.,n plak het volgende in de shell door met de rechtermuisknop te klikken op de PowerShell-venster
name=input("Don"t type anything!\n")print("Hi,",name,"!")
Nu, druk op de CTRL+X
opslaan en sluit de nano-venster en in uw shell type:
$ python3 input.pyDon"t type anything!
En druk op CTRL+D
om het programma te beëindigen terwijl het wacht op invoer van de gebruiker
Traceback (most recent call last):File "input.py", line 1, in name=input("Don"t type anything!")EOFError
De EOFError
uitzondering vertelt ons dat de Python-interpreter hit het einde van het bestand (EOF) voorwaarde voordat hij klaar is met het uitvoeren van de code, zoals de door de gebruiker ingevoerde geen input van gegevens.,
wanneer Python de EOF-voorwaarde bereikt op hetzelfde moment dat het alle code heeft uitgevoerd zonder uitzonderingen te gooien, wat een manier is waarop Python “gracieus kan afsluiten.”
detect script exit
als we willen zien wanneer een Python-programma wordt afgesloten zonder een uitzondering te maken, kunnen we de ingebouwde Python atexit
module gebruiken.
deatexit
behandelt alles wat we willen dat het programma doet wanneer het wordt afgesloten en wordt meestal gebruikt om programma ‘ s op te schonen voordat het programmaproces eindigt
om te experimenteren met atexit, laten we onze invoer aanpassen.,py voorbeeld om een bericht af te drukken bij het afsluiten van het programma. Open de input.py bestand opnieuw en vervang de tekst door deze
import atexitatexit.register(print,"Program exited successfully!")name=input("What"s your name?\n")print("Hi,",name,"!")
voer uw naam, en als je op enter drukt u moet krijgen:
What"s your name?ExampleHi, Example !Program exited successfully!
Merk op hoe de afslag tekst wordt weergegeven aan het einde van de uitgang waar we in plaats van de atexit
oproep en hoe, als wij in de plaats van de atexit
oproepen met een simpele print()
, krijgen we de afslag tekst waar de print()
al was, in plaats van waar de code wordt afgesloten.,
Program exited successfully!What"s your name?ExampleHi, Example !
Graceful exit
Er zijn verschillende manieren om een Python-programma af te sluiten waarbij geen uitzondering wordt gemaakt; de eerste poging was quit()
u kunt het bash-commando echo $?
om de exit code van de Python interpreter te verkrijgen.,
We kunnen ook bepalen het type van de code van de tolk moeten verlaten door het overhandigen quit()
een integer argument minder dan 256
exit()
heeft dezelfde functionaliteit als het een alias is voor quit()
Geen quit()
noch exit()
worden beschouwd als een goede praktijk, omdat ze beide vragen site
module, die is bedoeld om te worden gebruikt voor interactieve tolken en niet in programma ‘ s., Voor onze programma ‘ s moeten we iets gebruiken als sys.exit
merk op dat we expliciet een module moeten importeren om exit()
aan te roepen, dit lijkt misschien geen verbetering, maar het garandeert dat de benodigde module wordt geladen omdat het geen goede aanname is site
tijdens runtime wordt geladen., Als we geen extra modules willen importeren, kunnen we doen wat exit()
, quit()
en sys.exit()
achter de schermen doen en raise SystemExit
afsluiten met foutmeldingen
wat als we slechte invoer krijgen van een gebruiker?, Laten we kijken terug op onze input.py
script, en het toevoegen van de mogelijkheid om met slechte input van de gebruiker (CTRL+D
om een EOF teken)
De try
zegt Python om te proberen de code binnen de staat en om de uitzondering op de except
verklaring voor het afsluiten.
zonder fout afsluiten
Wat als de gebruiker uw programma een fout geeft, maar u niet wilt dat uw code een fout afdrukt, of om een soort van foutafhandeling te doen om de impact van de gebruiker te minimaliseren?,
We kunnen een finally
statement toevoegen waarmee we code kunnen uitvoeren nadat we onze foutafhandeling hebben uitgevoerd in catch
merk op dat de gebruiker nooit zou weten dat een EOFError
is opgetreden, dit kan worden gebruikt om standaardwaarden door te geven in het geval van slechte invoer of argumenten.,
Exit and release your resources
over het algemeen geeft Python alle resources die u in uw programma hebt aangeroepen automatisch vrij wanneer het wordt afgesloten, maar voor bepaalde processen is het goed om een aantal beperkte resources in een with
blok te plaatsen.
vaak zie je dit in open()
aanroepen, waar het niet goed vrijgeven van het bestand problemen kan veroorzaken met het lezen of schrijven naar het bestand later.
het with
blok geeft automatisch alle benodigde bronnen vrij., Als we er meer expliciet Voor willen zorgen dat het bestand gesloten is, kunnen we het atexit.register()
commando gebruiken om close()
$ nano openfile.pyimport atexitfile=open("testfile.txt","w")file.write("let"s write some text!\n")atexit.register(file.close)
als bronnen worden aangeroepen zonder gebruik te maken van een with
blok, zorg er dan voor dat ze expliciet worden vrijgegeven in een atexit
commando.
Afsluiten na een tijd
als we bang zijn dat ons programma nooit normaal zal eindigen, dan kunnen we Python ‘ s multiprocessing
module gebruiken om ervoor te zorgen dat ons programma zal eindigen.,
merk op hoe het proces niet kon worden voltooid toen de functie werd verteld om 7 seconden te wachten, maar voltooid en afgedrukt wat het moest doen toen het werd verteld om 0 seconden te wachten!
afsluiten met een return statement
als we een sectie code hebben die we willen gebruiken om het hele programma te beëindigen, in plaats van het break
statement de code buiten de lus te laten doorgaan, kunnen we het return sys.exit()
gebruiken om de code volledig te verlaten.,
Exit in het midden van een functie
als we geen return statement willen gebruiken, kunnen we nog steeds sys.exit()
aanroepen om ons programma te sluiten en een return
op te geven in een andere branch. Laten we onze code gebruiken van break.py alweer.
Exit als aan de voorwaarden is voldaan
als we een lus in onze Python-code hebben en we willen er zeker van zijn dat de code kan afsluiten als er een probleem is, kunnen we een vlag gebruiken die het kan controleren om het programma te beëindigen.,
Exit on keypress
als we ons programma in de console open willen houden tot we op een toets drukken, kunnen we een ongebonden input()
gebruiken om het te sluiten.
$ nano holdopen.pyinput("Press enter to continue")$ python3 holdopen.pyPress enter to continue$
we kunnen ook CTRL+C
doorgeven aan de console om Python een KeyboardInterrupt
karakter te geven. We kunnen zelfs de uitzondering KeyboardInterrupt
verwerken zoals we eerder uitzonderingen hebben behandeld.,
een multithreaded programma afsluiten
een multithreaded programma afsluiten is iets meer betrokken, omdat een eenvoudige sys.exit()
wordt aangeroepen vanaf de thread die alleen de huidige thread verlaat., De “vuile” manier om dit te doen is door os._exit()
zoals u kunt zien, heeft het programma de rest van het programma niet afgedrukt voordat het werd afgesloten, Dit is de reden waarom os._exit()
gewoonlijk gereserveerd is voor een laatste redmiddel, en van de hoofdthread is de voorkeursmethode voor het beëindigen van een multithreaded programma.,
End without sys exit
Sys.exit()
is slechts een van de verschillende manieren waarop we onze Python-programma ‘ s kunnen afsluiten, wat sys.exit()
doet is raise SystemExit
, dus we kunnen net zo gemakkelijk gebruik maken van een ingebouwde Python uitzondering of maak een van onze eigen!
we kunnen ook de os._exit()
gebruiken om het hostsysteem te vertellen het python-proces te stoppen, hoewel dit atexit
opschonen niet doet.,
Exit on exception
als we een uitzondering zonder enige behandeling willen afsluiten, kunnen we ons try-except
blok gebruiken om os._exit()
uit te voeren.
Exit and restart
ten slotte zullen we onderzoeken wat we doen om Python te verlaten en het programma opnieuw op te starten, wat in veel gevallen nuttig is.
Ik hoop dat u de tutorial nuttig vindt. Blijf terugkomen.
Dank u.,
oprichter van LikeGeeks. Ik werk sinds 2010 als Linux systeembeheerder. Ik ben verantwoordelijk voor het onderhouden, beveiligen en oplossen van problemen met Linux-servers voor meerdere clients over de hele wereld. Ik hou van het schrijven van shell en Python scripts om mijn werk te automatiseren.