From 069ce7669b2a2e43c294d645da6f10f92ec78852 Mon Sep 17 00:00:00 2001 From: CHUN YU YAO Date: Tue, 14 Mar 2023 08:28:24 +0800 Subject: [PATCH] 2023-03-12, fix thread blocking issue on some special environment. --- chrome_tixcraft.py | 2 +- config_launcher.py | 7 ++-- settings.py | 85 +++++++++++++++++++++++----------------------- 3 files changed, 49 insertions(+), 45 deletions(-) diff --git a/chrome_tixcraft.py b/chrome_tixcraft.py index 102c3d0..a239808 100644 --- a/chrome_tixcraft.py +++ b/chrome_tixcraft.py @@ -53,7 +53,7 @@ import argparse import ssl ssl._create_default_https_context = ssl._create_unverified_context -CONST_APP_VERSION = u"MaxBot (2023.03.11)" +CONST_APP_VERSION = u"MaxBot (2023.03.12)" CONST_MAXBOT_CONFIG_FILE = "settings.json" CONST_MAXBOT_LAST_URL_FILE = "MAXBOT_LAST_URL.txt" diff --git a/config_launcher.py b/config_launcher.py index 8b0c829..3e82c12 100644 --- a/config_launcher.py +++ b/config_launcher.py @@ -19,8 +19,10 @@ import platform import json import webbrowser import base64 +import threading +import subprocess -CONST_APP_VERSION = u"MaxBot (2023.03.11)" +CONST_APP_VERSION = u"MaxBot (2023.03.12)" CONST_MAXBOT_LAUNCHER_FILE = "config_launcher.json" CONST_MAXBOT_CONFIG_FILE = "settings.json" @@ -314,8 +316,9 @@ def btn_items_run_event(event): btn_index = int(str(event.widget['text']).split(" ")[1]) global txt_file_name filename=txt_file_name[btn_index-1].get().strip() + threading.Thread(target=launch_maxbot, args=(filename,)).start() - import subprocess +def launch_maxbot(filename): if True: working_dir = os.path.dirname(os.path.realpath(__file__)) if hasattr(sys, 'frozen'): diff --git a/settings.py b/settings.py index 502b39e..828de07 100644 --- a/settings.py +++ b/settings.py @@ -22,8 +22,9 @@ import pyperclip import base64 import time import threading +import subprocess -CONST_APP_VERSION = u"MaxBot (2023.03.11)" +CONST_APP_VERSION = u"MaxBot (2023.03.12)" CONST_MAXBOT_CONFIG_FILE = "settings.json" CONST_MAXBOT_LAST_URL_FILE = "MAXBOT_LAST_URL.txt" @@ -846,54 +847,55 @@ def btn_save_act(language_code, slience_mode=False): def btn_run_clicked(language_code): - import subprocess - print('run button pressed.') Root_Dir = "" save_ret = btn_save_act(language_code, slience_mode=True) print("save config result:", save_ret) if save_ret: - working_dir = os.path.dirname(os.path.realpath(__file__)) - if hasattr(sys, 'frozen'): - print("execute in frozen mode") + threading.Thread(target=launch_maxbot).start() - # check platform here. - if platform.system() == 'Darwin': - print("execute MacOS python script") - subprocess.Popen("./chrome_tixcraft", shell=True, cwd=working_dir) - if platform.system() == 'Linux': - print("execute linux binary") - subprocess.Popen("./chrome_tixcraft", shell=True, cwd=working_dir) - if platform.system() == 'Windows': - print("execute .exe binary.") - subprocess.Popen("chrome_tixcraft.exe", shell=True, cwd=working_dir) - else: - interpreter_binary = 'python' - interpreter_binary_alt = 'python3' - if platform.system() == 'Darwin': - # try python3 before python. - interpreter_binary = 'python3' - interpreter_binary_alt = 'python' - print("execute in shell mode.") - #print("script path:", working_dir) - #messagebox.showinfo(title="Debug0", message=working_dir) +def launch_maxbot(): + working_dir = os.path.dirname(os.path.realpath(__file__)) + if hasattr(sys, 'frozen'): + print("execute in frozen mode") - # some python3 binary, running in 'python' command. + # check platform here. + if platform.system() == 'Darwin': + print("execute MacOS python script") + subprocess.Popen("./chrome_tixcraft", shell=True, cwd=working_dir) + if platform.system() == 'Linux': + print("execute linux binary") + subprocess.Popen("./chrome_tixcraft", shell=True, cwd=working_dir) + if platform.system() == 'Windows': + print("execute .exe binary.") + subprocess.Popen("chrome_tixcraft.exe", shell=True, cwd=working_dir) + else: + interpreter_binary = 'python' + interpreter_binary_alt = 'python3' + if platform.system() == 'Darwin': + # try python3 before python. + interpreter_binary = 'python3' + interpreter_binary_alt = 'python' + print("execute in shell mode.") + #print("script path:", working_dir) + #messagebox.showinfo(title="Debug0", message=working_dir) + + # some python3 binary, running in 'python' command. + try: + print('try', interpreter_binary) + s=subprocess.Popen([interpreter_binary, 'chrome_tixcraft.py'], cwd=working_dir) + #s=subprocess.Popen(['./chrome_tixcraft'], stdout=subprocess.PIPE, stderr=subprocess.PIPE, cwd=working_dir) + #s=subprocess.run(['python3', 'chrome_tixcraft.py'], cwd=working_dir) + #messagebox.showinfo(title="Debug1", message=str(s)) + except Exception as exc: + print('try', interpreter_binary_alt) try: - print('try', interpreter_binary) - s=subprocess.Popen([interpreter_binary, 'chrome_tixcraft.py'], cwd=working_dir) - #s=subprocess.Popen(['./chrome_tixcraft'], stdout=subprocess.PIPE, stderr=subprocess.PIPE, cwd=working_dir) - #s=subprocess.run(['python3', 'chrome_tixcraft.py'], cwd=working_dir) - #messagebox.showinfo(title="Debug1", message=str(s)) + s=subprocess.Popen([interpreter_binary_alt, 'chrome_tixcraft.py'], cwd=working_dir) except Exception as exc: - print('try', interpreter_binary_alt) - try: - s=subprocess.Popen([interpreter_binary_alt, 'chrome_tixcraft.py'], cwd=working_dir) - except Exception as exc: - msg=str(exc) - print("exeption:", msg) - #messagebox.showinfo(title="Debug2", message=msg) - pass + msg=str(exc) + print("exeption:", msg) + #messagebox.showinfo(title="Debug2", message=msg) + pass def btn_preview_sound_clicked(): global txt_captcha_sound_filename @@ -2549,7 +2551,6 @@ def load_GUI(root, config_dict): AutofillTab(tab3, config_dict, language_code, UI_PADDING_X) RuntimeTab(tab4, config_dict, language_code, UI_PADDING_X) AboutTab(tab5, language_code) - threading.Thread(target=settings_timer, daemon=True).start() def main(): @@ -2571,7 +2572,6 @@ def main(): load_GUI(root, config_dict) - GUI_SIZE_WIDTH = 510 GUI_SIZE_HEIGHT = 619 @@ -2609,6 +2609,7 @@ def main(): root.call('wm', 'iconphoto', root._w, logo) os.remove(icon_filepath) + threading.Thread(target=settings_timer, daemon=True).start() root.mainloop() if __name__ == "__main__":