问题现象
想用python连接android设备,用adb命令进行top日志输出,具体调试代码如下
import subprocess
import os
def main():
cmd = 'adb shell busybox top -d 1 -n 1'
proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
stdout, stderr = proc.communicate()
# Process the output
for line in stdout.splitlines():
print(line)
if __name__ == "__main__":
main()
输出结果大概如下:
b'\x1b[H\x1b[JMem: 1851788K used, 139196K free, 0K shrd, 2K buff, 4069940416K cached'
b'CPU: 43.1% usr 15.6% sys 7.8% nic 31.3% idle 0.0% io 1.9% irq 0.0% sirq'
b'Load average: 2.89 2.31 2.32 5/1350 3187'
b'\x1b[7m PID PPID USER STAT VSZ %VSZ CPU %CPU COMMAND\x1b[0m'
b' 1603 165 system S 3700m190.0 1 31.3 {ips.mediacenter} com.rockchips.me'
b' 3186 899 shell R 3108 0.1 3 1.9 busybox top -d 1 -n 1'
b' 3171 2 root IW 0 0.0 1 1.9 [kworker/u8:2-fl]'
b' 629 165 system S 3899m200.2 0 0.0 {oid.tv.settings} com.android.tv.s'
b' 1951 165 u0_a2 S 3641m187.0 2 0.0 {d.process.media} android.process.'
b' 836 165 1068 S 3638m186.9 3 0.0 com.android.se'
b' 710 165 u0_a4 S 3638m186.9 0 0.0 {id.ext.services} android.ext.serv'
b'15602 165 u0_a9 S 3638m186.9 2 0.0 {id.defcontainer} com.android.defc'
从中发现COMMAND列中,打印不完整,数据都被截断了,看到现象,立刻就想到了和Windows的命令终端问题一样,就是窗口缓冲区大小的问题,但是本地调用命令是显示正常,那就找到如何设置adb shell调用大小即可
解决方法
实际上,adb shell 后面指定列行的数量就可以了
# 将命令修改如下
'adb shell COLUMNS=512 LINES=100 top -d 1 -n 1'
找了半天,原来方法就这么简单…