使用指令碼記錄 macbook 電池容量

2021-08-13 21:42:52 字數 3087 閱讀 4857

買了 macbook pro 後總是檢視電池的資訊,總是擔心電池衰減快導致續航崩掉,畢竟 macbook 的乙個賣點就是續航。後來每次都要開啟 system info 切換到 battery 檢視,有點麻煩,就產生了乙個想法寫乙個指令碼每天自動記錄 battery 的最大容量,隔一段時間使用圖示畫出容量的變化。

筆記本以樹形的方式記錄了 io 裝置的資訊,使用ioreg可以檢視這些資訊

ioreg -l -w0 | grep capacity

//output

| | "maxcapacity" = 6108

| | "currentcapacity" = 3288

| | "legacybatteryinfo" =

| | "designcapacity" = 6559

或者

system_profiler sppowerdatatype | grep

"cycle count" | awk ''

這個命令拿到的是迴圈此時,稍加改造就可以拿到最大電池容量

system_profiler sppowerdatatype | grep

"full charge capacity" | awk ''

同時 google 下system_profiler這個命令,發現這是 macos 提供的系統資訊查詢的命令

使用該命令就如同檢視 system info,只不過是同圖形介面變到了 terminal 上

既然可以通過這個命令拿到想要的資訊,下一步就是如何使用 python 呼叫這些命令並編寫指令碼了。

獲取 python 指令碼

使用os.popen()呼叫 shell 命令並輸出

comm = "system_profiler sppowerdatatype | grep 'full charge capacity' | awk ''"

os.popen(comm).read().strip()

# output

'6075'

為了提取更多有用的資訊,可以儲存system_profiler sppowerdatatype輸出的資訊,然後使用正規表示式提取我們需要的資訊。建立乙個類來完成這個任務再好不過了。

import os

import re

class

battery:

def__init__

(self):

self.power_info = os.popen("system_profiler sppowerdatatype").read()

def__get_number_value

(self, pattern):

ret = re.search(pattern, self.power_info).group(1)

return int(ret)

def__get_string_value

(self, pattern):

return re.search(pattern, self.power_info).group().split(":")[1].strip()

defmax_capacity

(self):

return self.__get_number_value(r'full charge capacity.*?(\d+)')

defcurrent_capacity

(self):

return self.__get_number_value(r'charge remaining.*?(\d+)')

defcycle_count

(self):

return self.__get_number_value(r'cycle count.*?(\d+)')

defdesign_capacity

(self):

info = os.popen('ioreg -l -w0 | grep designcapacity').read()

return int(info.split("=")[1].strip())

defpercentage

(self):

return int(self.current_capacity()/self.max_capacity() * 100)

defbattery_health

(self):

return int(self.max_capacity() / self.design_capacity() * 100)

defbattery_condition

(self):

return self.__get_string_value(r'condition.*')

defis_charging

(self):

status = self.__get_string_value(r'charging.*')

if status == 'no':

return

false

else:

return

true

由於system_profiler sppowerdatatype輸出的資訊本身就是格式化的,所以要進一步優化這個方案的話可以直接解析輸出資訊構造出乙個樹,使用 json 格式來存放資訊或者使用 dict 來存放資訊

在使用 python 的 re 模組時發現,在匹配字串的時候最多隻會匹配到一行的末尾。比如:

對於字串

charge remaining (mah): 5268

fully charged: no

charging: no

full charge capacity (mah): 6097

當我們使用re.search(r'charging.*')時,會匹配到charging: no這一行,但是也不會跨行

關於MacBook電池的正確使用方法,和保養技巧

標準充電方式 當電池電量剩下約 15 左右就要準備接電源充電了,剩 10 時會有電量過低警示。補充 沒有必要等到電池完全沒電時才充電,因為鋰電池本來就是設計給使用者隨時可補充電力用的。另外就是避免電池電量出現在 100 或 0 這兩個極端值,如果電量長期在 100 不放電,會讓鋰電子沒有地方可以活動...

Macbook使用技巧

mac osx下 safari 常用快捷鍵盤 command r 重新整理頁面 command t 新建乙個標籤 command shift 左右方向鍵 在 safari 標籤頁之間切換 command 向上方向鍵 翻到頁首 command 向下方向鍵 翻到頁尾 command 點選鏈結 在新標籤中...

MacBook使用建議

macbook很貴,但如果能正確地發揮它貴的作用,那它還是很有價效比的。macbook用錢堆出來的優勢有很多 藝術性的外觀,輕便,續航時間長,顯示效果好,觸控板,macos穩定性好,ssd速度快。以下是macbook的使用建議,讓你發揮它該有的金錢效果。1 觸控板 習慣使用手勢,比滑鼠方便非常多 2...