3

I'm doing os.system to tail for a live file and grep for a string How can I execute something when the grep succeeds? For example

cmd=  os.system(tail -f file.log | grep -i abc)
if (cmd):     
         #Do something and continue tail

Is there any way I can do this? It will only come to the if block when the os.system statement is completed.

0

2 Answers 2

1

You can use subprocess.Popen and read lines from stdout:

import subprocess

def tail(filename):
    process = subprocess.Popen(['tail', '-F', filename], stdout=subprocess.PIPE)

    while True:
        line = process.stdout.readline()

        if not line:
            process.terminate()
            return

        yield line

For example:

for line in tail('test.log'):
    if line.startswith('error'):
        print('Error:', line)
Sign up to request clarification or add additional context in comments.

Comments

0
  1. I am not sure that you really need to do this in python - perhaps it would e easier to pipe the tail-f output into awk: https://superuser.com/questions/742238/piping-tail-f-into-awk

  2. If you want to work in python (because you need to do some processing afterwards) then check this link on how to use tail -f: How can I tail a log file in Python?

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.