...
Tulostusvirta
...
viittaa
...
tiedon
...
välitykseen
...
tietokoneessa
...
sovelluksen,
...
tiedostojen
...
jne.
...
välillä.
...
Funktiot
...
...
ja
...
input
...
lähettävät
...
tämmöisiä
...
virtoja
...
sovelluksen
...
ja
...
konsoli-ikkunan
...
välillä
...
ja
...
tiedosto-objektit
...
sovelluksen
...
ja
...
tiedostojen
...
välillä.
...
Itseasiassa
...
funktiot
...
...
ja
...
input
...
käyttävät
...
sisäänrakennettuja
...
tiedosto-objekteja
...
toimintaansa.
...
Joskus voi olla hyödyllistä muuttaa näitä tiedosto-objekteja
...
tiedon
...
välittämiseksi
...
haluttuun
...
kohteeseen.
...
Modulista
...
sys
...
löytyy
...
kolme
...
tiedosto-objektia;
...
stdout,
...
johon
...
...
funktio
...
kirjoittaa
...
ja
...
stdin,
...
josta
...
input
...
funktio
...
lukee
...
käyttäjän
...
antaman
...
syötteen.
...
Kolmas
...
on
...
stderr,
...
johon
...
virhe
...
ilmoitukset
...
kirjoitetaan.
...
Ohjelman kaatuessa virheeseen (ainakin
...
windowsissa
...
ohjelmia
...
ajettaessa),
...
virhe
...
kyllä
...
tulostetaan
...
näytölle,
...
mutta
...
ikkuna
...
suljetaan
...
välittömästi.
...
IDLE-editorissa
...
ajettaessa
...
virhe
...
ilmoitukset
...
tulostetaan
...
punaisella
...
tekstillä.
...
Korvaamalla
...
stderr
...
tiedosto-objektilla
...
saadaan
...
virhe
...
ilmoitus
...
ohjattua
...
tiedostoon.
Myös stdout on vaihdettavissa niin, että funktion print avulla tulostettu teksti kirjoitetaankin konsoli-ikkunan sijasta tiedostoon. Tämä onnistuu myös välittämällä print funktiolle sitä kutsuttaessa parametri stream, joka määrittää mihin tiedosto-objektiin tulostus tapahtuu - parametrin vakioarvo on luonnollisesti stdout. Funktion input tulostama tekstikin menee tiedostoon.
Code Block |
---|
Myös stdout on vaihdettavissa niin, että funktion print avulla tulostettu teksti kirjoitetaankin konsoli-ikkunan sijasta tiedostoon. Tämä onnistuu myös välittämällä print funktiolle sitä kutsuttaessa parametri stream, joka määrittää mihin tiedosto-objektiin tulostus tapahtuu - parametrin vakioarvo on luonnollisesti stdout. Funktion input tulostama tekstikin menee tiedostoon. {code} import sys logfile = open("log.txt", "w") print("Tulostus parametrin avulla tiedostoon.", file=logfile) sys.stdout = logfile print("Tulostus tiedostoon korvaamalla stdout.") input("Paina Enter-näppäintä lopettaaksesi...") logfile.close() {code} |
Tälläinen
...
tulosteen
...
uudelleenohjaus
...
voi
...
olla
...
hyödyllistä
...
toteutettaessa
...
erilaisia
...
loki
...
tiedostoja.
...
Tälläisiin
...
teidostoihin
...
voidaan
...
tallentaa
...
ajon
...
aikana
...
tietoa
...
ja
...
ongelmien
...
esiintyessä
...
ohjelmaa
...
käytettäessä
...
loki
...
tiedostoa
...
tarkastelemalla
...
voidaan
...
tutkia
...
mikä
...
ongelmat
...
mahdollisesti
...
aiheuttaa.
Funktio input ei kirjoita tietoa vaan lukee. Tämän takia korvaamalla stdin, jollain tiedostolla, voidaan automatisoida ohjelmaan kirjoitettavaa syöte. Tässä vielä siitä esimerkki.
Code Block |
---|
Funktio input ei kirjoita tietoa vaan lukee. Tämän takia korvaamalla stdin, jollain tiedostolla, voidaan automatisoida ohjelmaan kirjoitettavaa syöte. Tässä vielä siitä esimerkki. {code} import sys scriptfile = open("script.txt", "r") sys.stdin = scriptfile a = input("Anna numero: ") b = input("Anna toinen numero: ") print("Numeroiden tulo on %s" % (int(a) * int(b))) input("Paina Enter-näppäintä lopettaaksesi...") {code} |
Tämä
...
on
...
hyödyllistä,
...
jos
...
halutaan
...
esimerkiksi
...
testata
...
jonkun
...
ohjelman
...
toimintaa.
...
Testaus
...
on
...
paljon
...
nopeampaa
...
kun
...
syötteen
...
tekeminen
...
ohjelmalle
...
tapahtuu
...
automaattisesti
...
sen
...
sijaan,
...
että
...
jokaisella
...
testi
...
kerralla
...
syöte
...
kirjoitettaisiin
...
käsin.
...
Tulosteiden uudelleenohjauksella on toki monia muita käyttökohteita. Pythonin dynaamisuuden takia, tiedosto-objektiksi käy mikä tahansa olio, jolla on metodit read ja write. Sisäänrakennetuista muuttuja tyypeistä lähinnä vain tiedosto-objekteilla on nämä metodit, mutta Pythonissa voi määritellä omia luokkia ja niille metodeja, jolloin tulosteiden uudelleen ohjausta voi hyödyntää paljon monipuolisemmin.