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
相关产品推荐
相关产品推荐

