import os, subprocess, tempfile import time ANDROID_TMPDIR = '/data/local/tmp/Output' ADB = os.environ.get('ADB', 'adb') verbose = False if os.environ.get('ANDROID_RUN_VERBOSE') == '1': verbose = True def adb(args, attempts = 1): if verbose: print args tmpname = tempfile.mktemp() out = open(tmpname, 'w') ret = 255 while attempts > 0 and ret != 0: attempts -= 1 ret = subprocess.call([ADB] + args, stdout=out, stderr=subprocess.STDOUT) if attempts != 0: ret = 5 if ret != 0: print "adb command failed", args print tmpname out.close() out = open(tmpname, 'r') print out.read() out.close() os.unlink(tmpname) return ret def pull_from_device(path): tmp = tempfile.mktemp() adb(['pull', path, tmp], 5) text = open(tmp, 'r').read() os.unlink(tmp) return text def push_to_device(path): # Workaround for https://code.google.com/p/android/issues/detail?id=65857 dst_path = os.path.join(ANDROID_TMPDIR, os.path.basename(path)) tmp_path = dst_path + '.push' adb(['push', path, tmp_path], 5) adb(['shell', 'cp "%s" "%s" 2>&1' % (tmp_path, dst_path)], 5)