import os, sys, 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 host_to_device_path(path): rel = os.path.relpath(path, "/") dev = os.path.join(ANDROID_TMPDIR, rel) return dev def adb(args, attempts=1, timeout_sec=600): if verbose: print(args) tmpname = tempfile.mktemp() out = open(tmpname, "w") ret = 255 while attempts > 0 and ret != 0: attempts -= 1 ret = subprocess.call( ["timeout", str(timeout_sec), ADB] + args, stdout=out, stderr=subprocess.STDOUT, ) 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, 60) text = open(tmp, "r").read() os.unlink(tmp) return text def push_to_device(path): dst_path = host_to_device_path(path) adb(["push", path, dst_path], 5, 60)