Создание исполняемого файла .py, но библиотека ОС не работает - PullRequest
0 голосов
/ 25 мая 2020

Я делаю .exe своего Python скрипта с помощью Pyinstaller, это программа для выключения вашего p c, когда приходит время ввода, но когда приходит время, он печатает «компьютер» будет выключен, но ничего не произойдет

import os
import sys
from datetime import datetime
from msvcrt import getch, kbhit
from time import sleep
def get_down(time):
    print('press ENTER to cancel \n')
    while True:
        if kbhit(): 
            key = ord(getch()) 
            if key == 13:
                print('You cancel the operation ')
                break

        if time == datetime.now().strftime('%H:%M'):
            print("The system is gonna turn off")
            os.system("shutdown /s /t 1")

print('Now is: {}'.format(datetime.now().strftime('%H:%M')))

1 Ответ

0 голосов
/ 25 мая 2020

Изначально я понимаю, что вы хотите запустить сценарий, который выключит ваш компьютер в указанное время, но может отменить его, если вы решите не отключаться до этого.

Исходя из этого, я внес некоторые изменения в ваш код. Модификации заключаются в том, что вы задаете функции выключения дату и время, когда хотите, чтобы система завершила работу. Функция вычисляет, сколько секунд осталось в будущем, а затем засыпает на это время. Если вы хотите отменить его, нажмите 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))
...