Seite 1 von 1

Python Prozess beenden

Verfasst: Freitag 18. April 2008, 13:10
von Mestapholes
Hallo,
ich habe folgendes Problem:
Ich starte ein Python Script aus VC++ per CreateProcess.
Dieser läuft dann in einem Cmd Fenster.
Das funktioniert soweit auch, aber leider wird das Fenster am Ende nicht geschlossen. Ich habe den Eindruck das der Python Interpreter noch weiterläuft (wird im Taskmanager auch noch angezeigt).
Wenn ich in dem Fenster Ctrl+C drücke wird dieser anscheinend geschlossen und das Fenster wird dann auch geschlossen.
Da ich mich mit Python nicht so wirklich auskenne würde ich hier mal gerne den (etwas gekürzten) Python Code posten und fragen ob ich am Code noch etwas ändern kann damit der Python Prozess auch beendet wird.

Für Hilfe wäre ich dankbar.
Grüsse
Christian

Code: Alles auswählen

class _SimulationBridge(wxPySimpleApp):
    def OnInit(self):
        wxBeginBusyCursor()
        try:
            simserverconn = SimulationServerConnection()

            print "Checking Parameters"
            len = missing_parameters(simserverconn)
            if(len !=0):
                return false;
            print "Starting Simulation"
            try:
                simid = simserverconn.rpc.simulation.start(sys.argv[2],sys.argv[3],sys.argv[4],int(sys.argv[5]))           
                    
            except:
                raise RuntimeError('ModelError:8511:%s' % sys.exc_info()[1])
        finally:
            wxEndBusyCursor()

        myframe = wxFrame(NULL, -1, "Simulating")
        myframe.Show(true)
        dlg = wxProgressDialog('Simulation Status: '+"Test", 'Initializing ...',
                               101, myframe, wxPD_CAN_ABORT | wxPD_APP_MODAL | wxPD_ELAPSED_TIME | wxPD_ESTIMATED_TIME | \
                               wxPD_REMAINING_TIME)
                               
        proceed = 1
        prev_status = ('initializing', 'Initializing ...')
        try:
            while proceed:
                time.sleep(1)
               
...

                if status[0] == 'end_complete':
                    if prev_status[0] != status[0]:
                        dlg.Update(100, prev_status[1]) # show 100% done
                    sess = da_get_sess(sess_id, '%')[0]
                    results = da_get_res(sess.res_id)[0]
            
                if status[0] == 'end_error':
                    msg = "Model System Error: 8513\n"
                          "No new results available." % status[1]
                    msgdlg = wxMessageDialog(myframe, msg, 'Simulation', wxOK | wxICON_INFORMATION)
                    msgdlg.ShowModal()
                    msgdlg.Destroy()
                    proceed = 0
                if status[0] == 'end_stopped':
                    msg = 'The simulation has been stopped cleanly.'
                    msgdlg = wxMessageDialog(myframe, msg, 'Simulation', wxOK | wxICON_INFORMATION)
                    msgdlg.ShowModal()
                    msgdlg.Destroy()                    
                    proceed = 0
        finally:
            dlg.Destroy()
            myframe.Close() 
            sys.exit()        
            return true
            
if __name__ == "__main__":  
   app = _SimulationBridge()
   app.MainLoop()     

Re: Python Prozess beenden

Verfasst: Dienstag 18. September 2012, 17:56
von dark-lion
Probier mal:

Code: Alles auswählen

import os
os.system("taskkill /process")
Process steht hierbei für python.exe/pythonw.exe

Re: Python Prozess beenden

Verfasst: Dienstag 18. September 2012, 18:43
von Hyperion
@dark-lion: Was soll dem OP das nützen? Er will doch kein externes Python-Script beenden, sondern dass das vorhandene sich selber sauber beendet! Zudem sollte man `os.system` nicht unbedingt benutzen, wo es doch mittlerweile das `subprocess`-Modul gibt.

@Mestapholes: Ich bin nicht wx erfahren, aber der Code sieht mir ziemlich krude aus... im Grunde genommen kommst Du aus dem Programm wohl nur im `finally`-Zweig heraus. Ob das mal so gewollt ist? Du kannst das Programm ja auch alleine starten - wie verhält es sich denn dann? Kann man es denn da sauber beenden? (Oder tut es das gar von alleine?) Oder gibt es dort schon Probleme?

Re: Python Prozess beenden

Verfasst: Dienstag 18. September 2012, 20:14
von dark-lion
Hyperion hat geschrieben:@dark-lion: Was soll dem OP das nützen? Er will doch kein externes Python-Script beenden, sondern dass das vorhandene sich selber sauber beendet!
In dem fall würde sys.exit() genügen, oder?