Изначально я понимаю, что вы хотите запустить сценарий, который выключит ваш компьютер в указанное время, но может отменить его, если вы решите не отключаться до этого.
Исходя из этого, я внес некоторые изменения в ваш код. Модификации заключаются в том, что вы задаете функции выключения дату и время, когда хотите, чтобы система завершила работу. Функция вычисляет, сколько секунд осталось в будущем, а затем засыпает на это время. Если вы хотите отменить его, нажмите Ctrl + C, чтобы отменить. По окончании сна должно наступить запланированное время выключения, поэтому мы выполняем команду выключения.
Я добавил к функции аргумент grace_time
, чтобы при тестировании P C не мгновенное завершение работы (что замедлило бы отладку)!
import os
from datetime import datetime, timedelta
from time import sleep
def shutdown_system(time: datetime, grace_time: int = 30):
"""
:param time: time the system should be shut down
:param grace_time: grace time before the shutdown command executes
"""
# calculate the scheduled shutdown time in seconds
sleep_time = (time - datetime.now()).total_seconds()
print("System scheduled to shutdown at {}".format(time.isoformat()))
print("Press Ctrl+C to cancel")
try:
# sleep the program for the time until the shutdown is scheduled
sleep(sleep_time)
except KeyboardInterrupt:
# a Ctrl+C will trigger this
print("You cancelled the shutdown!")
# return so shutdown doesn't continue
return
# Execute the shutdown command
print("The system is going to shutdown in {} seconds".format(grace_time))
os.system("shutdown /s /t {}".format(grace_time))
if __name__ == "__main__":
now = datetime.now()
shutdown_system(now + timedelta(seconds=1))