Getting the adb output using Python

前端 未结 3 905
夕颜
夕颜 2021-01-20 20:25

I\'m trying to get the output of a adb command using the following code:

pathCmd = \'./adb shell pm path \' + packageName


pathData = subprocess.Popen(pathC         


        
相关标签:
3条回答
  • 2021-01-20 20:50

    You should use check_output, below is my code which works successfully.

    from subprocess import check_output, CalledProcessError
    
    from tempfile import TemporaryFile
    
    def __getout(*args):
        with TemporaryFile() as t:
            try:
                out = check_output(args, stderr=t)
                return  0, out
            except CalledProcessError as e:
                t.seek(0)
                return e.returncode, t.read()
    
    # cmd is string, split with blank
    def getout(cmd):
        cmd = str(cmd)
        args = cmd.split(' ')
        return __getout(*args)
    
    def bytes2str(bytes):
        return str(bytes, encoding='utf-8')
    
    def isAdbConnected():
        cmd = 'adb devices'
        (code, out) = getout(cmd)
        if code != 0:
            print('something is error')
            return False
        outstr = bytes2str(out)
        if outstr == 'List of devices attached\n\n':
            print('no devices')
            return False
        else:
            print('have devices')
            return True
    

    Call isAdbConnected() to check whether device is connected. Hope to help you.

    0 讨论(0)
  • 2021-01-20 20:59
    from subprocess import Popen, PIPE
    
    with Popen(['adb devices'], shell=True,stdout=PIPE) as proc:
        for val in proc.stdout.readlines()[1:-1]:
            print(val.decode('UTF-8').replace('device', '').strip())
    
    0 讨论(0)
  • 2021-01-20 21:05
    import subprocess
    
    ADB_PATH="adb"
    
    def adbdevices(adbpath=ADB_PATH):
        return set([device.split('\t')[0] for device in subprocess.check_output([adbpath, 'devices']).splitlines() if device.endswith('\tdevice')])
    
    def adbshell(command, serial=None, adbpath=ADB_PATH):
        args = [adbpath]
        if serial is not None:
            args.extend(['-s', serial])
        args.extend(['shell', command])
        return subprocess.check_output(args)
    
    def pmpath(pname, serial=None, adbpath=ADB_PATH):
        return adbshell('pm path {}'.format(pname), serial=serial, adbpath=adbpath)
    
    0 讨论(0)
提交回复
热议问题