Рассчитать оставшееся дисковое пространство на Android с помощью Python
Я работаю над служебным дополнением для Kodi Media Center, которое будет проверять оставшееся дисковое пространство и напоминать человеку, когда пространство станет меньше 500 МБ, использовать инструмент обслуживания, который я создал. Он работает как отдельный сервис. Мне нужен способ определить оставшееся дисковое пространство с помощью Python на Android. Я пытался использовать statvfs(), но он, очевидно, совместим только с Unix-подобными системами, включая OS X. Это означает, что я могу использовать statvfs для Linux и OSX. Я могу использовать wmi или ctypes для Windows, но пока ничего для Android. Я могу создать отдельную оболочку для проверки операционной системы и использовать лучший метод для каждого - но я не могу найти модуль Python для Android, который может это сделать. Какие-либо предложения?
Вот мой существующий код:
import xbmc, xbmcgui, xbmcaddon
import os, sys, statvfs, time, datetime
from time import mktime
__addon__ = xbmcaddon.Addon(id='plugin.service.maintenancetool')
__addonname__ = __addon__.getAddonInfo('name')
__icon__ = __addon__.getAddonInfo('icon')
thumbnailPath = xbmc.translatePath('special://thumbnails');
cachePath = os.path.join(xbmc.translatePath('special://home'), 'cache')
tempPath = xbmc.translatePath('special://temp')
addonPath = os.path.join(os.path.join(xbmc.translatePath('special://home'), 'addons'),'plugin.service.maintenancetool')
mediaPath = os.path.join(addonPath, 'media')
databasePath = xbmc.translatePath('special://database')
if __name__ == '__main__':
#check HDD freespace
st = os.statvfs(xbmc.translatePath('special://home'))
if st.f_frsize:
freespace = st.f_frsize * st.f_bavail/1024/1024
else:
freespace = st.f_bsize * st.f_bavail/1024/1024
print "Free Space: %dMB"%(freespace)
if(freespace < 500):
text = "You have less than 500MB of free space"
text1 = "Please use the Maintenance tool"
text2 = "immediately to prevent system issues"
xbmcgui.Dialog().ok(__addonname__, text, text1, text2)
while not xbmc.abortRequested:
xbmc.sleep(500)
И вот ошибка, которую я получаю:
Error Type: <type 'exceptions.AttributeError'>
Error Contents: 'module' object has no attribute 'statvfs'
Traceback (most recent call last):
File "/storage/emulated/0/Android/data/org.xbmc.kodi/files/.kodi/addons/plugin.service.maintenancetool/service.py", line 39, in <module>
st = os.statvfs(xbmc.translatePath('special://home))
Attribute Error: 'module' object has no attribute 'statvfs'
1 ответ
Я нашел ответ в потоке коди, и это должно вернуть оставшиеся байты, оставленные на устройстве Android:
if xbmc.getCondVisibility('system.platform.android'):
import subprocess
df = subprocess.Popen(['df', '/storage/emulated/legacy'], stdout=subprocess.PIPE)
output = df.communicate()[0]
info = output.split('\n')[1].split()
size = float(info[1].replace('G', '').replace('M', '')) * 1000000000.0
size = size - (size % float(info[-1]))
available = float(info[3].replace('G', '').replace('M', '')) * 1000000000.0
available = available - (available % float(info[-1]))
return int(round(available)), int(round(size))