Access LogCat from Android via Python

Is it possible to read information sent via LogCat in python?

I have a program written in java. Each drawing frame sends a tag: message "Fps:": number

I would like this post to fire an event that I can catch in my python script, so I can draw an fps meter.

+4
source share
2 answers

Take a look at subprocess . The following code has been adapted from Stefaan Lippens

import Queue import subprocess import threading class AsynchronousFileReader(threading.Thread): ''' Helper class to implement asynchronous reading of a file in a separate thread. Pushes read lines on a queue to be consumed in another thread. ''' def __init__(self, fd, queue): assert isinstance(queue, Queue.Queue) assert callable(fd.readline) threading.Thread.__init__(self) self._fd = fd self._queue = queue def run(self): '''The body of the tread: read lines and put them on the queue.''' for line in iter(self._fd.readline, ''): self._queue.put(line) def eof(self): '''Check whether there is no more content to expect.''' return not self.is_alive() and self._queue.empty() # You'll need to add any command line arguments here. process = subprocess.Popen(["logcat"], stdout=subprocess.PIPE) # Launch the asynchronous readers of the process' stdout. stdout_queue = Queue.Queue() stdout_reader = AsynchronousFileReader(process.stdout, stdout_queue) stdout_reader.start() # Check the queues if we received some output (until there is nothing more to get). while not stdout_reader.eof(): while not stdout_queue.empty(): line = stdout_queue.get() if is_fps_line(line): update_fps(line) 

Of course, you will need to write the is_fps_line and update_fps yourself.

+8
source

I would redirect adb logcat to your python script. It will look like this:

 $ adb logcat | python yourscript.py 

Now you can read from logcat to sys.stdin and analyze it as you like.

+3
source

All Articles