Скрипт не работает вне IDE
import random
import pyautogui as pg
from time import sleep
import os
import keyboard
import signal
import multiprocessing as mp
flag = True # Флаг состояния потока moveTo_pressF5_thread
# Функция для убийства приложения
def hook(pid):
while True:
if keyboard.is_pressed('ctrl + shift + alt + s'):
os.kill(pid,signal.SIGTERM)
os._exit(1)
# Функция для случайных движений мышкой и перезагрузки страницы
def moveTo_pressF5():
global flag
while flag:
a, b, c = random.randint(500,1000), random.randint(300,600), random.randint(1, 5)
sleep(10)
pg.moveTo(a, b, c)
sleep(40)
pg.press('f5')
if __name__ == '__main__':
pid = os.getpid()
exit_process = mp.Process(target=hook,args=[pid]) # завершение программы
exit_process.start()
pause = mp.Process(target=moveTo_pressF5) # процесс движения мышкой и обновления
pause.start()
while True:
if keyboard.is_pressed("ctrl + shift + alt + p"):
flag = False
os.system('cls' if os.name == 'nt' else 'clear') # очистка терминала от сообщений про скрипт
print('Скрипт приостановлен, нажмите ctrl + alt + p для продолжения')
pause.terminate()
keyboard.wait('ctrl + alt + p')
flag = True
print("Скрипт продолжается...")
pause = mp.Process(target=moveTo_pressF5) # процесс движения мышкой и нажатия ф5
pause.start()
Как и написано в заголовке при запуске скрипта вне IDE (когда запускаешь через python) скрипт перестает нормально работать. Функционал паузы вроде бы работает, однако если в самом начале (спустя секунду, может две после запуска) нажать комбинацию закрытия скрипта (ctrl + shift + alt + s), то ничего не происходит. При этом сам скрипт вроде как не очень тяжелый, однако жрет 100% процессора.
Ответы (1 шт):
Автор решения: Amgarak
→ Ссылка
Давайте попробуем упростить:
import random
import pyautogui as pg
from time import sleep
import os
import keyboard
import threading
import multiprocessing
exit_Process = None # Тут будем хранить объект multiprocessing.Process
# Функция для убийства приложения
def hook_exit():
keyboard.wait('ctrl + shift + alt + s')
print("!!!")
exit_Process.terminate() # Перед закрытием программы завершаем процесс moveTo_pressF5
os._exit(1)
# Функция для случайных движений мышкой и перезагрузки страницы
def moveTo_pressF5():
while True:
a, b, c = random.randint(500,1000), random.randint(300,600), random.randint(1, 5)
sleep(10)
pg.moveTo(a, b, c)
sleep(40)
pg.press('f5')
if __name__ == '__main__':
# Создаем поток для выхода из программы по нажатию сочетания клавиш
hook_exit_thread = threading.Thread(target=hook_exit)
hook_exit_thread.start() # Запускаем поток
while True:
# Создаем Process для движении мыши и обновления страницы
moveTo_pressF5_Process = multiprocessing.Process(target=moveTo_pressF5)
exit_Process = moveTo_pressF5_Process
moveTo_pressF5_Process.start() # Запускаем Process
os.system('cls' if os.name == 'nt' else 'clear')
print("Running... \n")
print('Нажмите ctrl + shift + alt + p что бы поставить скрипт на паузу')
keyboard.wait("ctrl + shift + alt + p")
moveTo_pressF5_Process.terminate()
os.system('cls' if os.name == 'nt' else 'clear')
print('Скрипт приостановлен, нажмите ctrl + alt + p для продолжения')
keyboard.wait('ctrl + alt + p')