2
2
お題は不問!Qiita Engineer Festa 2024で記事投稿!
Qiita Engineer Festa20242024年7月17日まで開催中!

最近 YouTube 見ながら寝落ちしてしまうので PC のオフタイマー的なやつ作ったった

Posted at

モチベーション

これは人によると思うのですが、自分の場合はラジオや 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 がシャットダウンされてしまいました。
ありがとうございました :sleeping:

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2