Самодельный внешний модуль не выполняет инструкцию "sys.exit()".

Malenkey

Пользователь
Пользователь
Ноя 3, 2022
140
11
18
Здравствуйте! Требуется консультация знающего специалиста!

Я написал внешний модуль "autorun.py". Вот его код:

Python:
import winreg
from winreg import *
import psutil
from tkinter import messagebox
import sys

error = 0
proc_path = ''
proc_name = ''
count_proc = 0

def autorun(no_dub = 0):
    global error
    global proc_path
    global proc_name
    global count_proc
   
    autorun = winreg.OpenKeyEx(HKEY_CURRENT_USER, r'Software\Microsoft\Windows\CurrentVersion\Run', 0, KEY_ALL_ACCESS)

    proc = psutil.Process()
    try:
        proc_path = proc.exe()
    except:
        error = 1

    try:
        proc_name = proc.name()
    except:
        error = 2
   

    if no_dub == 1:
        for proc in psutil.process_iter():
            if proc.name() == proc_name:
                count_proc += 1
    elif no_dub == 0:
        pass
    else:
        messagebox.showinfo("Autorun_error", '"dub" param unrecognized!')
    return error, no_dub, count_proc, proc_name

if proc_name != 'pythonw.exe':                
    if proc_path != '':
        winreg.SetValueEx(autorun, proc_name, 0, REG_SZ, proc_path)
    else:
        if error == 1:
            messagebox.showinfo("Autorun_error", "Can't detect EXE path")
        elif error == 2:
            messagebox.showinfo("Autorun_error", "Can't detect EXE name")

if count_proc > 1:
    try: # try - это на случай, если прога консольная, без tkinter GUI
        root.destroy()
    except:
        pass
    sys.exit()

Я вызываю его из основной программы "Processes.py" вот так:

Python:
from autorun import autorun

autorun(no_dub = 1)

Данный модуль "autorun.py" добавляет текущий процесс программы в автозагрузку и, если аргумент "no_dub = 1" (по умолчанию он равен "0"), модуль должен выполнять инструкции "root.destroy()" и "sys.exit()", запрещающие запуск дубликатов программы. Но сам модуль почему-то эти инструкции завершения работы не выполняет. Но функция модуля возвращает 4 аргумента (error, no_dub, count_proc, proc_name):

error - код ошибки
no_dub - параметр no_dub
count_proc - количество найденных одноименных процессов
proc_name - имя своего процесса

Запускал я программу "Processes.py", скомпилированную в "ехе" "pyinstaller"ом.
Чтобы выйти из положения, мне пришлось тогда из основной программы "Processes.py" вызывать этот внешний модуль вот с такой проверкой:

Python:
if autorun(no_dub = 1)[2] > 2:
    root.destroy()
    sys.exit()

> 2 - это потому что в "Taskmanager" 2 процесса на одну программу приходится почему-то.
Так все работает. Но остаются вопросы!
1) А как все же заставить именно внешний модуль "autorun.py" выполнять эти функции выхода? Почему он их не выполняет?
2) А почему при запуске скомпилированного в "ехе" "Processes.py" у меня в процессах повисает сразу 2 экземпляра "Processes.ехе"? Дочерних окон у меня в программе не используется. Как так? Там получается, что отдельный процесс на tkinter GUI чтоль идет? Или на что-то еще?
Заранее БОЛЬШО-О-О-ОЕ СПАСИБО за помощь и ответ! 😌
 

Вложения

  • Вопрос.zip
    2,7 КБ · Просмотры: 3
Последнее редактирование:

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 661
474
83
опять пустые except...

upd
и глобалы...
 
Последнее редактирование:

Malenkey

Пользователь
Пользователь
Ноя 3, 2022
140
11
18
 

Malenkey

Пользователь
Пользователь
Ноя 3, 2022
140
11
18
А чем это плохо?
 

4olshoy_blen

Популярный
Пользователь
Ноя 13, 2022
423
115
43
А чем это плохо?
Уже было же сказано где то тут в соседних ветках. Ты вылавливаешь все возможные ошибки. Не нужно так делать. Это не по "питоновски"))
 

Malenkey

Пользователь
Пользователь
Ноя 3, 2022
140
11
18
Уже было же сказано где то тут в соседних ветках. Ты вылавливаешь все возможные ошибки. Не нужно так делать. Это не по "питоновски"))
Аааааа. А я думал "пустой" - это сказано в отношении "pass" :unsure:
 

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 661
474
83
Уже было же сказано где то тут в соседних ветках. Ты вылавливаешь все возможные ошибки. Не нужно так делать. Это не по "питоновски"))
это не не по питоновски, а усложняет отладку...
 

Malenkey

Пользователь
Пользователь
Ноя 3, 2022
140
11
18
это не не по питоновски, а усложняет отладку...
Спасибо! Ну а ответ-то по моей проблеме мне будет?
 

4olshoy_blen

Популярный
Пользователь
Ноя 13, 2022
423
115
43
Спасибо! Ну а ответ-то по моей проблеме мне будет?
Ответ - решений нет:D
 

Malenkey

Пользователь
Пользователь
Ноя 3, 2022
140
11
18
А как же насчет того, чтобы уместить мой нубовский портяночный код в пару твоих "хрен прочтешь" инструкций?! :ROFLMAO:
 

4olshoy_blen

Популярный
Пользователь
Ноя 13, 2022
423
115
43
А как же насчет того, чтобы уместить мой нубовский портяночный код в пару твоих "хрен прочтешь" инструкций?! :ROFLMAO:
ну я бы сократил код, но знаешь че-то мне лень)) я когда глянул вначале первые 2 строки сразу понял тут безнадежно всё, надо переписывать:LOL:
import winreg from winreg import *
Ну вот что это такое и кто так учил?:sick::poop:
 

Malenkey

Пользователь
Пользователь
Ноя 3, 2022
140
11
18
Ну раз лень, тогда отдыхай! :D А за замечание спОсибо! (y) Видишь, я же не супер ПРО в "Питоне" как ты! Я же нуб полный! Я коряво пишу! :sneaky::LOL:
 
Последнее редактирование:

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 661
474
83
Ну раз лень, тогда отдыхай! :D А за замечание спОсибо! (y) Видишь, я же не супер ПРО в "Питоне" как ты! Я же нуб полный! Я коряво пишу! :sneaky::LOL:
Но что то пишите за деньги...
 

Malenkey

Пользователь
Пользователь
Ноя 3, 2022
140
11
18
Но что то пишите за деньги...
Конечно! ) Деньги же всем нужны! 🤑 И чем больше, тем лучше! :LOL: Разве не так?
P.S. А махонькие студенты, которые тут вопросы задают и которым Вы, 4olshoy_blen и я (немножко) помогаем по возможности - они разве не для того учатся программированию, чтобы потом этим деньги зарабатывать? Зарабатывать за износ зрения, за опухшие мозги... Или в институтах одни бессребренники, энтузиасты, меценаты и альтруисты учатся? ;)
 
Последнее редактирование:

Malenkey

Пользователь
Пользователь
Ноя 3, 2022
140
11
18
Ответ - решений нет:D
Ну ладно. Спасибо этому форуму! Пойдем к другому форуму! ;):cool::D
 

Форум IT Специалистов