2015-08-09 9 views
2

Я работаю над надстройкой службы для Media Center Kodi, которая проверяет оставшееся место на диске и напоминает человеку, когда пространство становится меньше 500 МБ, чтобы использовать инструмент обслуживания, который я созданный. Он работает как отдельный сервис. Мне нужен способ определить оставшееся место на диске с помощью python на Android. Я пытался использовать statvfs(), но, по-видимому, он совместим только с Unix-подобными системами, включая OS X. Это означает, что я могу использовать statvfs для Linux и OSX. Я могу использовать wmi или ctypes для Windows, но пока ничего для Android. Я могу создать отдельную оболочку, чтобы проверить операционную систему и использовать лучший метод для каждого, но я не могу найти модуль python для Android, который может это сделать. Какие-либо предложения?Рассчитать оставшееся место на диске на Android с помощью Python

Вот мой существующий код:

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' 
+0

попробуйте сделать это с помощью 'os.popen()', где вы можете получить ответ команды оболочки. – Gahan

ответ

0

Я нашел ответ в kodi thread и это должно вернуть оставшиеся байты, оставленные на android device:

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))