2

バッテリー時間をログに記録するスクリプトを探していました(つまり、ラップトップがバッテリーで動作する合計時間)。私は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()

スクリプトは実際に機能しますが、もっと良くしたいと思います。システム acpi コマンドを使用してバッテリーの統計情報を取得し、それらを 1 つのファイル (batt_log) に書き込んで開始時刻と終了時刻を保存し、そのファイルから読み取り、時間差を計算して別のファイル (batt_store) に書き込みます。プロセスとして5分ごとに実行します。

私がやりたいことは、おそらくファイル I/O 操作を減らし、プログラムに永続的に値を保存する方法を見つけることです。どんなアイデアでも大歓迎です。

4

1 に答える 1

0

コマンドを介してデータを取得する方がはるかに簡単です。本質的に、acpi コマンドが行うことは、 /dev/ の特定のファイル ノードでファイル記述子を開くことです。情報を取得するために dbus インターフェイスを見ることができます。

ファイルの開閉に関しては、dbus や gconf などのサービスを再度使用できますが、ファイルを書き込む方が簡単です。

于 2012-10-25T18:25:06.800 に答える