2017-07-01 3 views
0

Il s'agit d'un script simple utilisé pour calculer les scores Z de certains tests neuropsychologiques.Le script Python continue à fonctionner en arrière-plan

Mais récemment, le code semble fonctionner en arrière-plan, même après avoir quitté le programme. Ce problème n'existait pas auparavant, j'utilise le morceau de démarrage suivant pour m'assurer que le programme s'exécute avec l'élévation, et est la taille correcte pour l'affichage.

Le programme peut être arrêté à l'aide d'une commande "exit" qui déclenche SystemExit ou simplement en appuyant sur le bouton X dans la barre supérieure. Le programme continue à fonctionner en arrière-plan malgré tout.

Où est-ce que je me suis trompé?

def progStructure(): 
    first_run = True 
    if first_run: 
     import os 
     os.system("mode con: cols=160 lines=50") 
     print(""" 
    ================================================ 
    PROGRAM GREETING 
    ================================================ 
    """) 

     mainStartup() 
     first_run = False 

    while settings("auto_run"): 
     mainStartup() 
     #this function contains the main program, but irrelevant to the question 

    print("Auto shutdown enabled, program is shutting down.") 

    wait(2) 
    exit() 
     #informs the user data has been saved then restarts 


import ctypes, sys 

def is_admin(): 
    try: 
     return ctypes.windll.shell32.IsUserAnAdmin() 
    except: 
     return False 

if is_admin(): 
    progStructure() 
else: 
    ctypes.windll.shell32.ShellExecuteW(None, "runas", sys.executable, "", None, 0) 
    progStructure() 

fonction d'écriture Excel Mon:

def excelWriter(excel_path, data_num, printable_list): 
    from time import strftime 
    date = strftime("%Y-%m-%d") 
    time = strftime("%H:%M:%S") 
    if settings("excel_output_subjectNames"): 
     patient_name_local = patient_name  
    else: 
     patient_name_local = "N/A" 

    demographic_data = [patient_ID, patient_name_local, patient_admin, date, time, patient_age, patient_sex, patient_edu] 

    from openpyxl import Workbook 
    from openpyxl import load_workbook 

    wb = Workbook(write_only=False) 

    try: 
     test_name_list = [ 
        "(1)MMT", "(2)MOCA", "(3)3MS", "(4)GISD", "(5)ECR", 
        "(6)Sözel Bellek Süreçleri", "(7)Rey Karmaşık Figür", "(8)İz Sürme", "(9)Stroop", 
        "(10)Wisconsin", "(11)Görsel Sözel Test", "(12)Renkli İz Sürme", 
        "(13)Wechsler", "(14)Wechsler-Sayı Dizisi", "(15)Sözel Akıcılık", 
        "(16)Semantik Akıcılık", "(17)Saat Çizme", "(18)SDOT", "(19)Ayları İleri-Geri Sayma" 
        ] 


     while True: 
      try: 
       data_workbook = load_workbook(filename = excel_path + settings("excel_name"), read_only=False) 
       active_sheet = data_workbook.get_sheet_by_name(test_name_list[data_num-1]) 
       active_sheet.append(demographic_data + printable_list) 

       data_workbook.save(filename = excel_path + settings("excel_name")) 
       break 

      except: 
       for i in range(len(test_name_list)): 
        wb.create_sheet(title = test_name_list[i]) 

       wb.save(filename = excel_path + settings("excel_name")) 
       data_workbook = load_workbook(filename = excel_path + settings("excel_name"), read_only=False) 
       active_sheet = data_workbook.get_sheet_by_name("Sheet") 
       data_workbook.remove_sheet(active_sheet) 
       data_workbook.save(filename = excel_path + settings("excel_name")) 
       continue 

    except: 
     raise 
+0

Obtenez-vous le message d'arrêt? Et quels sont exactement les symptômes du «programme en cours d'exécution»? Est-ce juste que vous voyez l'exécutable Python toujours dans la liste de processus? –

+0

Vous n'avez pas un exemple complet. Ajoutez également des instructions print pour voir où il se bloque. –

+0

Je peux voir l'exécutable python encore dans la liste des processus, oui. Soit mon exe s'il est gelé, soit le python lui-même, si c'est juste le script. J'ai réalisé ceci après que j'ai essayé de supprimer le programme. –

Répondre

0

oublié de fermer le fichier Excel après avoir écrit, qui semble résolu le problème, merci pour tout le monde aidant.