如何使用Python执行adb命令?

2024-04-30 03:32:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我想创建一个可以用来执行Android adb命令的python脚本。 我看了一下https://github.com/rbrady/python-adb,但似乎无法使它完美工作。 有什么建议吗?


Tags: https命令github脚本com建议androidadb
3条回答

为此,请使用monkeyrunner工具。从它的documentation

Besides using the monkeyrunner API itself, you can use the standard Python os and subprocess modules to call Android tools such as Android Debug Bridge.

这个工具应该能完成这项工作。 https://pypi.python.org/pypi/pyadb/0.1.1

我不得不修改一些函数,让它在Python2.7上运行,并使用subprocess代替。这里是我的版本中修改过的代码:

def __build_command__(self,cmd):
    if self.__devices is not None and len(self.__devices) > 1 and self.__target is None:
        self.__error = "Must set target device first"
        return None

    if type(cmd) is tuple:
        a = list(cmd)
    elif type(cmd) is list:
        a = cmd
    else:
        a = [cmd]
    a.insert(0, self.__adb_path)
    if self.__target is not None:
        a.insert(1, ['-s', self.__target])

    return a

def run_cmd(self, cmd):
    """
    Run a command against adb tool ($ adb <cmd>)
    """
    self.__clean__()

    if self.__adb_path is None:
        self.__error = "ADB path not set"
        return

    try:
        args = self.__build_command__(cmd)
        if args is None:
            return
        # print 'args>', args
        cmdp = subprocess.Popen(args, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
        self.__output, self.__error = cmdp.communicate()
        retcode = cmdp.wait()
        # print 'stdout>', self.__output
        # print 'stderr>', self.__error
        if retcode < 0:
            print >>sys.stderr, "Child was terminated by signal", -retcode
        else:
            return
    except OSError, e:
        self.__error = str(e)

    return

python-adb项目实现了USB通信层和up,甚至提供了类似Android adb的API,以便于转换。

相关问题 更多 >