# 怎么用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 命令更改为匹配您的设备和系统。
python怎么检索安卓手机12版本内存,图片,视频,等格式存储情况?并且清理.log,为什么我这段代码会出错?
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
3条回答 默认 最新
- 「已注销」 2023-03-17 08:34关注
参考GPT和自己的思路:
根据你提供的代码和问题,有几个问题需要注意和解决:
在执行
adb shell
命令时,你需要进入到/sdcard
目录下,否则无法获取该目录下所有文件的信息。所以正确的命令应该是result = subprocess.check_output(['adb', 'shell', 'cd', '/sdcard', ';', 'ls', '-R'], universal_newlines=True)
。在使用正则表达式检索
.log
文件时,你的正则表达式应该是pattern = re.compile(r'.*\.log')
,因为.
表示任何字符,而*
表示匹配前面的字符零次或多次,所以需要用\
转义.
。删除文件时需要在文件名前加上路径
/sdcard/
,所以应该是subprocess.run(['adb', 'shell', 'rm', f'/sdcard/{file}'])
。在解析命令输出时,你需要判断当前行是否以
/sdcard
开头而不是包含/sdcard
,因为 df 命令输出的格式不一定相同。所以应该使用if line.startswith('/sdcard'):
。在输出总容量、已用容量和可用容量时,你需要使用转义字符
\
而不是\_
,所以应该是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 命令更改为匹配您的设备和系统。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥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之后自动重连失效