You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python保存Android top命令输出至TXT文件出现异常字符问题

解决Android 8+ top命令输出乱码的问题

问题根源

Android 8及以上版本的top命令默认会输出ANSI终端控制字符(用于终端颜色高亮、光标定位等),这些字符在终端窗口中会被解析成格式效果,不会显示出来,但直接写入文本文件后就会变成“奇怪字符”,干扰后续的文件处理。

具体解决方法

1. 使用top的批处理模式禁用控制字符

大部分Android设备的top命令支持-b参数(批处理模式),启用后会关闭ANSI控制字符输出,直接输出纯文本内容。修改你的命令调用逻辑:

import subprocess
import time

# 改用列表形式传递命令,避免引号转义问题
with open(file_name, 'w', encoding='utf-8') as file_to_write:
    for i in range(1, number_of_samples):
        subprocess.call(['adb', 'shell', 'top -m 10 -n 1 -b; echo "----------"'], stdout=file_to_write)
        time.sleep(5)

2. 过滤已输出的ANSI控制字符

如果你的设备top不支持-b参数,可以通过管道用sed过滤掉所有ANSI转义序列:

import subprocess
import time

with open(file_name, 'w', encoding='utf-8') as file_to_write:
    for i in range(1, number_of_samples):
        # 用sed移除所有ANSI控制序列
        subprocess.call(['adb', 'shell', 'top -m 10 -n 1 | sed "s/\x1B\[[0-9;]*[a-zA-Z]//g"; echo "----------"'], stdout=file_to_write)
        time.sleep(5)

3. 代码优化要点

  • 改用with语句管理文件句柄,避免手动关闭文件时出现异常
  • 添加encoding='utf-8'参数,确保文件以标准编码保存,避免编码不一致导致的乱码
  • 用列表形式传递subprocess命令参数,规避字符串拼接带来的引号转义问题

4. 验证效果

修改后重新运行脚本,打开生成的文本文件,应该不会再出现奇怪字符,后续处理脚本也能正常读取全部内容。

内容的提问来源于stack exchange,提问作者Darth Ratus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 06:30:04