モチベーション
これは人によると思うのですが、自分の場合はラジオや YouTube を流したまま寝てしまうと、良い睡眠が取れていないせいか翌朝に体調を崩しがちです。
なので、寝ている間に PC をシャットダウンして快眠を狙います。
寝ている間にマウスを的確に動かしてシャットダウンするのは無理だと思うので、自動化します。
寝ている間に無音状態にすれば快眠になるという医学的根拠はありません。
私がそんな気がするからやってみるというだけなので、十分ご注意ください。
環境
- Windows 11
- Python 3.12
実装
こちらの記事を参考にして、os ライブラリを使います。
shutdown.py
import os
import sys
import time
from string import Template
def is_windows(os_name: str) -> bool:
return os_name == "nt"
def is_mac(os_name: str) -> bool:
return os_name == "posix"
class OSNotSupportedError(Exception):
pass
def get_shutdown_command(os_name: str) -> str:
if is_windows(os_name):
return "shutdown /s /t 0"
if is_mac(os_name):
return "sudo shutdown now"
raise OSNotSupportedError("Only Windows or Mac supported")
def shutdown(*, after_seconds: int) -> None:
command = get_shutdown_command(os.name)
start = time.time()
while True:
now = time.time()
if now - start >= after_seconds:
break
time.sleep(1)
os.system(command)
def main() -> None:
try:
after_seconds = int(sys.argv[1])
except IndexError:
print("時間を指定してください。")
raise
except (TypeError, ValueError):
print("時間が整数ではありません。")
raise
if after_seconds < 0:
print("時間はマイナスにできません。")
raise
message = Template("$seconds 秒後にシャットダウンします。").safe_substitute(seconds=after_seconds)
try:
print(message)
shutdown(after_seconds=after_seconds)
except KeyboardInterrupt:
print("処理を中断しました。")
sys.exit(2)
if __name__ == '__main__':
main()
実行
例えば 30 分後にシャットダウンしたい場合、以下のコマンドで実行します。
python shutdown.py 1800
ああ、PC がシャットダウンされてしまいました。
ありがとうございました