|
Python Tutorial |
|
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.)
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.
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!
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.
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
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.
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)
|
Python Tutorial |
|