閒置偵測 + 保持機器清醒
長時間無人值守的自動化執行常因兩種情況中斷:螢幕保護 / 電源原則在執行中途讓機器睡眠,或是當有人正在
使用機器時執行應該暫停。框架原本兩種訊號都沒有。idle_keepawake 補上這兩者,並以可注入接縫實作,
所有邏輯都能在不碰作業系統的情況下測試。
idle_seconds()/is_idle()——距離使用者上次鍵盤 / 滑鼠輸入的秒數(Windows 上用GetLastInputInfo),透過可注入的probe取得。plan_keep_awake()——純 planner,描述請求對應到哪些清醒旗標。keep_awake()——具範圍的 context manager,在with區塊期間保持機器清醒,離開時還原先前狀態。keep_awake_on()/allow_sleep()——供 JSON 動作流程使用的行程全域開 / 關配對。
三個 keep-awake 入口皆透過可注入的 driver 套用計畫(預設 Windows 用
SetThreadExecutionState、macOS 用 caffeinate、Linux 用 systemd-inhibit)。不匯入
PySide6。
無頭 API
from je_auto_control import (
idle_seconds, is_idle, keep_awake, keep_awake_on, allow_sleep,
)
idle_seconds() # 例如 3.4 ——距離上次輸入的秒數
is_idle(300) # 沒人碰機器滿 5 分鐘後回傳 True
# 具範圍:只在長步驟執行時保持清醒
with keep_awake():
run_long_batch()
# 流程式:開始時開、結束時關
keep_awake_on(display=True, system=True)
try:
run_long_batch()
finally:
allow_sleep()
is_idle() 是「只在使用者離開時才執行」的判斷閘;:func:keep_awake /
keep_awake_on() 阻止螢幕與系統睡眠,讓整夜執行不被打斷。display=False 會保持系統清醒但允許
螢幕變黑(對無頭機器較省電)。
執行器指令
AC_idle_seconds``(→ ``{idle_seconds})、AC_is_idle``(``threshold →
{idle, idle_seconds})、AC_plan_keep_awake``(``display / system → 計畫)、
AC_keep_awake_on``(``display / system → 生效中的計畫)與 AC_allow_sleep
(→ {released})。皆以對應的 ac_* MCP 工具(讀取為唯讀、keep-awake 開 / 關為僅副作用)
及 Script Builder 指令(位於 Shell 分類下)形式提供。keep_awake() context manager
則是具範圍使用的 Python API 介面。