Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migration of unmigrated content due to installation of a new plugin

...

Tulostusvirta

...

viittaa

...

tiedon

...

välitykseen

...

tietokoneessa

...

sovelluksen,

...

tiedostojen

...

jne.

...

välillä.

...

Funktiot

...

print

...

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

...

print

...

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

...

print

...

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.