Python-scripts afsluiten/beëindigen (eenvoudige voorbeelden)

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.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *