我正在寻找一个记录电池时间的脚本(即笔记本电脑在电池上运行的总时间)。我以为我会在python中写一个镜头。我是python的初学者,并使用本网站上的大量例子来提出这个:D
#!/usr/bin/env python
import subprocess, os
from datetime import datetime
time = (datetime.now()).strftime('%H:%M:%S')
date = (datetime.today()).strftime('%d/%m/%y')
def start(x):
if x[2] == 'Discharging' and int(x[3][:-1]) in range(98, 101):
batt_log = open('/home/saad/Code/batt_log', 'w')
batt_log.write(time + '%s' %(os.linesep))
batt_log.close()
def end(x):
if x[2] == 'Discharging' and int(x[3][:-1]) in range(1, 11):
batt_log = open('/home/saad/Code/batt_log', 'a')
batt_log.write(time)
batt_log.close()
def main():
output = subprocess.check_output('acpi -b', shell=True)
l = (output.replace(',', '')).split(' ')
if not (l[2] in ['Charging', 'Full'] or int(l[3][:-1]) in range(11, 98)):
start(l)
end(l)
ts = []
batt_log = open('/home/saad/Code/batt_log', 'r')
all_lines = batt_log.readlines()
for line in all_lines:
ts.append(line.replace(os.linesep, ''))
if len(ts) > 1:
FMT = '%H:%M:%S'
tdelta = datetime.strptime(ts[1], FMT) - datetime.strptime(ts[0], FMT)
batt_store = open('/home/saad/Code/batt_store', 'a')
batt_store.write(date + '\nTotal Time: ' + str(tdelta) + '\n')
batt_store.close()
batt_store = open('/home/saad/Code/batt_store', 'r')
all_lines = batt_store.readlines()
print "Last Battery Time:", all_lines[-1][-8:]
if __name__ == '__main__':
main()
该脚本实际上有效,但我希望它更好。它使用system acpi命令获取电池状态,将它们写入一个文件(batt_log)以存储开始和结束时间,然后从该文件读取,计算时差并将其写入另一个文件(batt_store)。我作为一个过程每5分钟运行一次。
我想做的是使用较少的文件I / O操作,并找到一种在程序中持久存储值的方法。欢迎任何想法。
答案 0 :(得分:0)
通过命令获取数据要容易得多。实质上,acpi命令将在/ dev /中的特定文件节点上打开文件描述符。您可以查看dbus接口以获取信息。
关于打开和关闭文件,您可以再次使用dbus或gconf等服务,但只是编写文件更容易。