python - bash - grep

Udv!

Most belefutottam egy szamomra erdekes problemaba. A lenyeg, hogy volt egy haromszoros for ciklus egy python programban, amire grepet raktam, es fura volt, hogy egesz ejszaka semmit sem talalt. A problemas kodot sikerult erre a par sorra levezetni:



for i in xrange(0, 5):
    print "%s %s" % ('alma', 'beka')
    time.sleep(1)

Na most ezt ugye csak kiir masodpercenkent 1 sorba 2 szot (

\n

- nel a vegen) 5 alkalommal, majd kilep. Ha ugy futtatom, hogy

./prg.py

ez mukodik is, viszont ha ugy, hogy

./prg.py | grep -i a

azt csinalja, hogy 5 masodpercig nem ir ki semmit, majd 5 masodperc utan egybol az 5 sort. Ha megirom ugyanezt a programot shellben, nem all fent ez a problema.

Van valakinek otlete mi lehet ennek az oka? Ugye az a fura, hogy ha nincs grep, akkor masodpercenkent kiirja az outputot.

Na most pl. ha megprobalom beiranyitani egy fajlba az eredmenyt, akkor is csak 5 masodperc utan jelenik meg barmi is a fajlban, addig csak letrejon, de nem valtozik a (z ures) tartalma. Ha egy shell script generalja ugyanazt a tartalmat, minden normalis.

Koszi a valaszokat.

Hozzászólások

Meg kell erősíteni az alapokat, és nem fog összedőlni a világ. :-)

Egyébként

#!/usr/bin/python -u

, és akkor nem kell a flush():

-u     Force stdin, stdout and stderr to be totally unbuffered.  On systems where it matters, also put stdin, stdout and stderr in
              binary mode.  Note that there is internal buffering in xreadlines(), readlines() and file-object iterators ("for line in
              sys.stdin") which is not influenced by this option.  To work around this, you will want to use "sys.stdin.readline()" inside a
              "while 1:" loop.

-----
A kockás zakók és a mellészabások tekintetében kérdezze meg úri szabóját.

Legfőbb problémád, hogy valószínűleg valami 20 évesnél nem régebbi OS-en próbálod. Keress rá, hogy buffered IO.

--------------------------------------
Unix isn't dead. It just smells funny.