os.system to tail for a live file and
grep for a string
How can I execute something when the grep succeeds?
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.
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 line in tail('test.log'): if line.startswith('error'): print('Error:', line)Answer2:
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: <a href="https://superuser.com/questions/742238/piping-tail-f-into-awk" rel="nofollow">https://superuser.com/questions/742238/piping-tail-f-into-awk</a>
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: <a href="https://stackoverflow.com/questions/12523044/how-can-i-tail-a-log-file-in-python" rel="nofollow">How can I tail a log file in Python?</a>