赵灵越 2023-03-17 08:12 采纳率: 99.3%
浏览 12
已结题

python怎么检索安卓手机12版本内存,图片,视频,等格式存储情况?并且清理.log,为什么我这段代码会出错?

#  怎么用python知道我手机的存储情况,并且检索.log,并且清理

# 导入库
import subprocess
import re

# 执行 adb shell
result = subprocess.check_output(['adb', 'shell', 'sdcard'], universal_newlines=True)

# 使用正则表达式检索.log
pattern = re.compile(r'.*\.log')
match = pattern.findall(result)

# 遍历并删除.log文件
for file in match:
    subprocess.run(['adb', 'shell', 'rm', f'/sdcard/{file}'])
    
# 执行 df 命令获取手机存储情况
result = subprocess.check_output(['adb', 'shell', 'df'], universal_newlines=True).splitlines()

# 解析命令输出
for line in result:
    if '/sdcard' in line:
        storage_info = line.split()
        total_storage = int(storage_info[1]) * 1024
        used_storage = int(storage_info[2]) * 1024
        available_storage = int(storage_info[3]) * 1024
        print(f"总容量:{total_storage},已用容量:{used_storage},可用容量:{available_storage}")

# 这将输出您的手机总容量、已用容量和可用容量,并删除所有以“.log”结尾的文件。请确保将路径和 adb 命令更改为匹配您的设备和系统。

img

  • 写回答

3条回答 默认 最新

  • 「已注销」 2023-03-17 08:34
    关注

    参考GPT和自己的思路:

    根据你提供的代码和问题,有几个问题需要注意和解决:

    1. 在执行 adb shell 命令时,你需要进入到 /sdcard 目录下,否则无法获取该目录下所有文件的信息。所以正确的命令应该是 result = subprocess.check_output(['adb', 'shell', 'cd', '/sdcard', ';', 'ls', '-R'], universal_newlines=True)

    2. 在使用正则表达式检索 .log 文件时,你的正则表达式应该是 pattern = re.compile(r'.*\.log'),因为 . 表示任何字符,而 * 表示匹配前面的字符零次或多次,所以需要用 \ 转义 .

    3. 删除文件时需要在文件名前加上路径 /sdcard/,所以应该是 subprocess.run(['adb', 'shell', 'rm', f'/sdcard/{file}'])

    4. 在解析命令输出时,你需要判断当前行是否以 /sdcard 开头而不是包含 /sdcard,因为 df 命令输出的格式不一定相同。所以应该使用 if line.startswith('/sdcard'):

    5. 在输出总容量、已用容量和可用容量时,你需要使用转义字符 \ 而不是 \_,所以应该是 print(f"总容量:{total_storage},已用容量:{used_storage},可用容量:{available_storage}")

    尝试解决以上问题后,你的代码应该如下所示:

    # 导入库
    import subprocess
    import re
    
    # 执行 adb shell
    result = subprocess.check_output(['adb', 'shell', 'cd', '/sdcard', ';', 'ls', '-R'], universal_newlines=True)
    
    # 使用正则表达式检索.log
    pattern = re.compile(r'.*\.log')
    match = pattern.findall(result)
    
    # 遍历并删除.log文件
    for file in match:
        subprocess.run(['adb', 'shell', 'rm', f'/sdcard/{file}'])
    
    # 执行 df 命令获取手机存储情况
    result = subprocess.check_output(['adb', 'shell', 'df'], universal_newlines=True).splitlines()
    
    # 解析命令输出
    for line in result:
        if line.startswith('/sdcard'):
            storage_info = line.split()
            total_storage = int(storage_info[1]) * 1024
            used_storage = int(storage_info[2]) * 1024
            available_storage = int(storage_info[3]) * 1024
            print(f"总容量:{total_storage},已用容量:{used_storage},可用容量:{available_storage}")
    
    # 这将输出您的手机总容量、已用容量和可用容量,并删除所有以“.log”结尾的文件。请确保将路径和 adb 命令更改为匹配您的设备和系统。
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 4月12日
  • 已采纳回答 4月4日
  • 创建了问题 3月17日

悬赏问题

  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效