Python – threading.Thread kann ein Beendigungsereignis der STOP-Taste nicht abfangenPython

Python-Programme
Anonymous
 Python – threading.Thread kann ein Beendigungsereignis der STOP-Taste nicht abfangen

Post by Anonymous »

Ich verwende Pycharm. Wenn ich auf die Stopp-Schaltfläche klicke, löscht der Unterprozess.Popen die verbleibenden .bat-Dateien. Aber nachdem subprocess.Popen in eine threading.Thread-Funktion eingefügt wurde ... werden die .bat-Dateien nicht mehr gelöscht, auf der Pycharm-STOP-Schaltfläche.
Hier ist ein Beispielcode,

Code: Select all

def threads_(title, index):

#Create and process .Bat
with open('test'+str(index)+'.bat', "w", encoding='utf-8') as a: a.write('executable_program.py -start_test "'+title+'"')
p1 = subprocess.Popen('test'+str(index)+'.bat', stdout=subprocess.PIPE, text=True)
try:
while p1.poll() is None:
time.sleep(0.5)
_output = p1.stdout.readline()

except KeyboardInterrupt as e:
#Cleanup on Exit
print('Closing ...')
for c in psutil.Process(p1.pid).children(recursive=True): c.kill()
psutil.Process(p1.pid).kill()
print('Cleanup Done')
os.remove('test'+str(index)+'.bat')
quit()

def start_threads():
remaining = ['thread_test1', 'thread_test2', 'thread_test3']
Globals.thread1 = [Globals.thread1.append(None) for index in range(0, 3)]

for index in range(0, 3):
Globals.thread1[index] = threading.Thread(name='thread' + str(index), target=threads_, args=(remaining[index], index))
Globals.thread1[index].start()

start_threads()
Wie kann ich die threading.Thread-Funktion dazu bringen, Dateien zu löschen, wenn ich die Pycharms-STOP-Taste drücke?
Ich kann auch nicht die Funktion „join()“ verwenden, wenn ich die Threads starte.
Bearbeiten
Ich habe die Frage mit einem Beispiel aktualisiert,
Der folgende Code funktioniert mit einem tkinter root.mainloop() ... aber er funktioniert nur in 40 % der Fälle. Beim Beenden werden nicht immer die handler_stop_signals ausgelöst

Code: Select all

def handler_stop_signals(signum, frame):
print("Hello world")

def main_thread():
Globals.root = tk.Tk()
Globals.root.geometry("+{}+{}".format(650, 50))
Globals.root.geometry("{}x{}".format(200, 200))
Globals.root.mainloop()

signal.signal(signal.SIGINT, handler_stop_signals)
signal.signal(signal.SIGTERM, handler_stop_signals)

main_thread()

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post