Previous Page

Up One Level

Next Page

Python Tutorial

Contents

Index

Vorige: 1. Een eerste kennismaking Omhoog: Python Tutorial Volgende: 3. Een informele inleiding in Python
Onderdelen
  • 2.1 De interpreter opstarten
    • 2.1.1 Het meegeven van argumenten
    • 2.1.2 Interactieve modus
  • 2.2 De interpreter en zijn omgeving
    • 2.2.1 Foutafhandeling
    • 2.2.2 Uitvoerbare Python-scripts
    • 2.2.3 Encoding van de broncode
    • 2.2.4 Het opstartbestand voor de interactieve modus


2. Het gebruik van de Python-interpreter


2.1 De interpreter opstarten

De Python interpreter wordt meestal als /usr/local/bin/python geïnstalleerd op die machines waar hij beschikbaar is; als je /usr/local/bin in je Unix shell's zoekpad zet, kun je de interpreter starten door

python

in de shell in te typen. Aangezien de installatiedirectory van de interpreter tijdens de installatie opgegeven moet worden, zijn afwijkende locaties mogelijk; vraag dit na bij je plaatselijke Python-goeroe of systeembeheerder. ( /usr/local/python is bijvoorbeeld een veelgebruikt alternatief)

Door een end-of-file-karakter (Control-D onder Unix, Control-Z onder Windows) op de primaire prompt te typen, wordt de interpreter met een exitstatus nul afgesloten. Als dat niet werkt, kun je de interpreter afsluiten door "import sys; sys.exit()" te typen.

De regelbewerkingsmogelijkheden van de interpreter zijn niet erg geavanceerd. Onder Unix kan tijdens de installatie ondersteuning voor de GNU readline library aangezet worden, waardoor uitgebreide faciliteiten voor command line editing (interactieve editing op de command line) beschikbaar komen. De snelste manier om erachter te komen of command line editing ondersteund wordt, is om Control-P te typen op de eerste Python-prompt die je te zien krijgt: hoor je een piep, dan is command line editing beschikbaar; zie Appendix A voor een inleiding tot de commando's en toetsen. Als er niets lijkt te gebeuren, of als P getoond wordt, heb je geen command line editing tot je beschikking; je kunt dan alleen backspace gebruiken om karakters te verwijderen van de huidige regel.

De interpreter lijkt qua werking enigszins op de Unix-shell: als hij aangeroepen wordt met stdin gekoppeld aan een tty device, dan voert hij de interactief ingevoerde commando's direct uit; wordt hij aangeroepen met als argument een bestandsnaam, of met een bestand als stdin, dan voert hij de inhoud van het bestand uit als script.

Een alternatieve manier om de interpreter op te starten, is "python -c command [arg] ...", waardoor de statements in command worden uitgevoerd (analoog aan de -c optie van de shell). Aangezien Python statements vrijwel altijd wel spaties bevatten, of andere characters die de shell interpreteert als speciale characters, is het het beste om command volledig in dubbele aanhalingstekens te vatten.

Merk op dat er een verschil is tussen "python file" en "python <file". In het laatste geval worden verzoeken om invoer vanuit het programma, zoals aanroepen van input() en raw_input()vanuit file bediend. Aangezien dit bestand door de parser al volledig is ingelezen voordat het programma werd gestart, komt het programma meteen het einde van het bestand tegen. In het eerste geval (wat meestal de gewenste situatie is) worden alle verzoeken bediend vanuit het bestand of device wat gekoppeld is aan de stdin van de Python-interpreter.

Wanneer een scriptbestand gebruikt wordt, kan het handig zijn om na het uitvoeren van het script automatisch in interactieve modus terecht te komen. Dit kun je bereiken door -i mee te geven vóór het script. (Dit werkt niet als het script van stdin wordt gelezen, om dezelfde reden als uitgelegd in de vorige paragraaf.)


2.1.1 Het meegeven van argumenten

Als er bij de interpreter een scriptnaam en aanvullende argumenten bekend zijn, worden deze aan het script meegegeven in de variabele sys.argv, die uit een lijst met strings bestaat. De lengte hiervan is tenminste 1; als geen script en geen argumenten zijn meegegeven, is sys.argv[0] een lege string. Als als naam van het script '-' (betekenis: stdin) meegegeven is, wordt sys.argv[0] op '-' gezet. Als -c command gebruikt wordt, wordt sys.argv[0] op '-c'gezet. Opties die volgen op -c command worden niet als interpreter-opties beschouwd en verwerkt, maar worden in sys.argv gezet om door command afgehandeld te worden.


2.1.2 Interactieve modus

Het inlezen van commando's vanaf een tty wordt interactieve modus genoemd. In deze modus wordt een prompt voor het volgende commando's gegeven in de vorm van de primaire prompt, meestal drie groter-dan karakters (">>> "); voor vervolgregels wordt geprompt met behulp van de secundaire prompt, die standaard door drie punten ("... ") wordt weergegeven. Vóór de eerste prompt drukt de interpreter een welkomstboodschap af, waarin het versienummer en een copyright-melding staan:

python
Python 1.5.2b2 (#1, Feb 28 1999, 00:02:06)  [GCC 2.8.1] on sunos5
Copyright 1991-1995 Stichting Mathematisch Centrum, Amsterdam
>>>

Vervolgregels zijn nodig voor het invoeren van constructies die meerdere regels omspannen. Kijk bijvoorbeeld eens naar dit if-statement:

>>> de_aarde_is_plat = 1
>>> if de_aarde_is_plat:
...     print "Pas op dat je er niet afvalt!"
... 
Pas op dat je er niet afvalt!


2.2 De interpreter en zijn omgeving


2.2.1 Foutafhandeling

Wanneer een fout optreedt, drukt de interpreter een foutmelding en een stack trace af. In interactieve modus keert hij daarna terug naar de primaire prompt; als de invoer uit een bestand kwam, sluit hij, na het afdrukken van de stack trace, af met een exit status ongelijk aan nul. (Exceptions die afgehandeld worden met een except clause in een try statement worden in dit verband niet als fouten beschouwd). Sommige fouten zijn per definitie fataal en leiden tot het afsluiten van het systeem met een exitstatus ongelijk aan nul; dit geldt voor interne inconsistenties en bij het optreden van een geheugentekort. Alle foutboodschappen worden naar stderr geschreven; normale uitvoer van de uitgevoerde commando's wordt naar stdout geschreven.

Door het interrupt-karakter (meestal Control-C of DEL) in te typen op de primaire of secundaire prompt, wordt de invoer gecancelled, en keert de interpreter terug bij de primaire prompt.2.1 Het intypen van het interrupt-karakter tijdens de uitvoering van een commando veroorzaakt een KeyboardInterrupt exception, die eventueel door middel van een try statement kan worden afgehandeld.


2.2.2 Uitvoerbare Python-scripts

Onder BSD-achtige Unix-systemen kunnen Python-scripts, net als shell scripts, rechtstreeks uitvoerbaar gemaakt worden, door de regel

#! /usr/bin/env python

aan het begin van het script op te nemen en het bestand in uitvoerbare modus te zetten (aangenomen dat de interpreter voorkomt in het PATH van de gebruiker). "#!" moeten de eerste twee karakters van het bestand zijn. Op sommige platforms moet deze eerste regel eindigen met een regeleinde à la Unix ("\n"), niet à la Mac OS ("\r") of Windows ("\r\n"). Merk op dat het hekje, "#", in Python gebruikt wordt om een commentaarregel te starten.

Het script kan uitvoerbaar gemaakt worden met behulp van het chmod commando:

$ chmod +x myscript.py

2.2.3 Encoding van de broncode

Het is mogelijk om andere encodings dan ASCII te gebruiken in Python-bronbestanden. De beste manier om dit te doen is om nog een bijzondere commentaarregel in te voeren, onmiddellijk na de #! regel, waarmee de bestandsencoding gedefinieerd wordt:

# -*- coding: iso-8859-1 -*-

Met deze declaratie worden alle karakters in het bronbestand behandeld als iso-8859-1, en is het mogelijk om rechtstreeks Unicode string literals in de geselecteerde encoding te schrijven. Een lijst van mogelijke encodings is te vinden in de Python Library Reference, in de paragraaf over codecs.

Als je editor het opslaan van bestanden als UTF-8 met een UTF-8 byte order mark (BOM) ondersteunt, kun je die mogelijkheid gebruiken, in plaats van een encodingdeclaratie. IDLE ondersteunt deze mogelijkheid als Options/General/Default Source Encoding/UTF-8 is aangezet. Hou er rekening mee dat deze signature niet begrepen wordt door oudere Python-releases (2.2 en vroeger), en, bij “#!”-bestanden, ook niet door het besturingssysteem.

Door gebruik te maken van UTF-8 (hetzij door de signature, hetzij door een encodingdeclaratie) kun je karakters uit de meeste talen gebruiken in strings en commentaar; gebruik van niet-ASCII karakters in identifiers wordt niet ondersteund. Om alle karakters correct weer te geven moet je editor het bestand als UTF-8 herkennen, en gebruikmaken van een font wat alle karakters in het bestand ondersteund.


2.2.4 Het opstartbestand voor de interactieve modus

Bij interactief gebruik van Python is het vaak handig om standaard een aantal commando's te laten uitvoeren, iedere keer dat de interpreter opgestart wordt. Dit kun je doen door de omgevingsvariabele PYTHONSTARTUP te laten verwijzen naar het bestand wat je opstartcommando's bevat. Dit is vergelijkbaar met het gebruik van .profile bij Unix shells.

Het opstartbestand wordt alleen gelezen in interactieve sessies; het wordt niet gebruikt bij het lezen van commando's uit een script, noch wanneer /dev/tty expliciet wordt opgegeven als bron voor commando's (hoewel dat in wezen op hetzelfde neerkomt als een interactieve sessie). Het opstartbestand wordt uitgevoerd in dezelfde namespace waar interactieve commando's worden uitgevoerd, zodat objecten die erdoor gedefinieerd of geïmporteerd worden, gewoon gebruikt kunnen worden in de interactieve sessie. Ook kun je de primaire (sys.ps1)and secundaire (sys.ps2) prompts in het bestand wijzigen.

Als je nog een extra opstartbestand wilt lezen uit de huidige directory, kun je dit in het globale opstartbestand wijzigen, door iets als "if os.path.isfile('.pythonrc.py'): execfile('.pythonrc.py')" te coderen. Als je het opstartbestand in een script wilt gebruiken, moet je dat expliciet doen:

import os
filename = os.environ.get('PYTHONSTARTUP')
if filename and os.path.isfile(filename):
    execfile(filename)



Voetnoten

... prompt.2.1
Mogelijkerwijs wordt dit verhinderd door een probleem met het GNU Readline package.

Previous Page

Up One Level

Next Page

Python Tutorial

Contents

Index

Vorige: 1. Een eerste kennismaking Omhoog: Python Tutorial Volgende: 3. Een informele inleiding in Python
Release 2.3.4, documentation updated on May 20, 2004.
See About this document... for information on suggesting changes.