why egrep's stdout did not go through pipe?

Posted by ccfenix on Stack Overflow See other posts from Stack Overflow or by ccfenix
Published on 2010-04-08T07:12:27Z Indexed on 2010/04/08 7:13 UTC
Read the original article Hit count: 335

Filed under:
|
|
|

Hi, i got a weird problem regarding egrep and pipe

I tried to filter a stream containing some lines who start with a topic name, such as "TICK:this is a tick message\n"

When I try to use egrep to filter it : ./stream_generator | egrep 'TICK' | ./topic_processor It seems that the topic_processor never receives any messages

However, when i use the following python script: ./stream_generator | python filter.py --topics TICK | ./topic_processor everything looks to be fine.

I guess there need to be a 'flush' mechanism for egrep as well, is this correct?

Can anyone here give me a clue? Thanks a million

import sys
from optparse import OptionParser

if __name__ == '__main__':

    parser = OptionParser()

    parser.add_option("-m", "--topics",
                  action="store", type="string", dest="topics")

    (opts, args) = parser.parse_args()

    topics = opts.topics.split(':')

    while True:
        s = sys.stdin.readline()
        for each in topics:
            if s[0:4] == each:
                sys.stdout.write(s)
                sys.stdout.flush()

© Stack Overflow or respective owner

Related posts about shell

Related posts about egrep