I wanted to pipe the output of my Apache’s error logs to a Python script. To do this you need to set the a CustomLog directive in your Apache Config.
Edit /etc/apache2/sites-available/default and add the following line:
CustomLog "| /usr/bin/yourscript" combined
To read the input into Python you need to setup a non-blocking read from stdin.
#! /usr/bin/python
import sys
import select
while sys.stdin in select.select([sys.stdin], [], [], 0)[0]:
line = sys.stdin.readline()
if line:
# Read a line
exit()
else:
# End of file
exit()
else:
# Nothing to read
exit()
Obviously, this script just exit’s at end point but you could put logic at each point to process the text as it is read, not read or eof by python.
Let me know if you have any improvements to this script.