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()