oh please DON'T chdir ! it's not thread safe On Tuesday, February 10, 2015 at 11:19:18 AM UTC+1, Yebach wrote: > > Hello > I encounter an interesting problem or bug > > I have a app that runs some *.exe program that returns a file (*.out) to > be processed every couple of second. > If I want to stop this exe from working I delete *.lls file. > So if a user hits play button I create lls file put it in a directory, > sets status in db to 11 and then after some calculation is done user clicks > on stop button and lls file is deleted, status in db is set back to 10, and > some more actions are done with out file (doesn't really matter) > > NOW HERE IS THE CATCH > > If I run web2py from eclipse it works fine > > if I run web2py as standalone so doble click on web2py.py file in my > windows explorer the lls file is not deleted, BUT there is a catch. If I > refresh the page, click the stop button in my webapp lls file is deleted > > ANY suggestions? > > BTW there are no errors > > here is my code > > > id = (request.vars.id) > try: > path = os.path.join(request.folder, 'engine') > llsPath = os.path.join(request.folder, 'engine', 'e1', > request.vars.id + '.lls') > > data = db(getDbScript(db(getDbScript(request.vars.id)).select( > db.scripts.id, db.scripts.sc_lls, db.scripts.sc_engine_output, > db.scripts.sc_status, db.scripts.sc_menu_data).first())).select( > db.scripts.id, db.scripts.sc_lls, db.scripts.sc_engine_output, > db.scripts.sc_status, db.scripts.sc_menu_data).first() > script = db(getDbScript(request.vars.id)).select(db.scripts.id, > db.scripts.sc_lls, db.scripts.sc_engine_output, db.scripts.sc_status, > db.scripts.sc_menu_data,db.scripts.sc_organization, > db.scripts.sc_cal_start).first() > org = script["sc_organization"] > shifts = db(db.shifts.sh_organisation == > org).select(db.shifts.sh_code, > db.shifts.sh_start1,db.shifts.sh_start2,db.shifts.sh_end1,db.shifts.sh_end2,db.shifts.sh_color,db.shifts.sh_length1,db.shifts.sh_length2).as_list() > outPath = os.path.join(request.folder, 'engine', 'e1', > request.vars.id + '.out') > > if not script: > return dict(status = -1) > > ###Status = 11 - Script is being calculated > if script.sc_status == 11: > > > # Change status - status = 10 --> user lahko da skripo računat > - nima napak oz pomanjklivih podatkov > #, sc_engine_output = readOutFile(request.vars.id))s > # Add when user stopped calculation (ce bojo problemi se bo > zraven posiljalo tudi id od script activitya) > #Odstranim lls datoteko --> engine preneha delovat > if os.path.isfile(llsPath): > os.remove(llsPath) > > activity = db(db.script_activity.sa_id_script == > request.vars.id).select(db.script_activity.id, > db.script_activity.sa_stop, orderby = ~db.script_activity.id, limitby = > (0, 1)).first() > activity.update_record(sa_stop = 'now') > script.update_record(sc_status = 10) > > > ##če obstaja out datotkea > if os.path.isfile(outPath): > #preberemo fajl > out = readOutFile(request.vars.id).split('\n') > #Vnesemo podatke v tabelo script > script.update_record(sc_engine_output = readOutFile( > request.vars.id)) > #odstranim out. datoteko > os.remove(outPath) > workersDb = db(db.workers.w_organisation == org).select( > db.workers.id, db.workers.w_nick_name).as_list() > #sparsamo out datoteko da jo lahko damo v tabelo result > dateStart = script["sc_cal_start"] > resultData = parseOut(out, dateStart, shifts, workersDb, > org) > #Pišemo rezultate v tabelo results > resultsDbInsert(resultData["resultsDbData"], org, id) > > > return dict(status = 1) > > > else: > > ##prevedemo skripto v id.lls, prav tako zapišemo še v sc_lls > # > db.script_activity.insert(sa_id_script = request.vars.id, > sa_start = 'now'); > > ##validiramo json če ima kakršne koli napake idt. > valJson = validateJson(script.sc_menu_data) > if 1!=1 :#not valJson: > #validacija ni uspela vrnemo error 300 > return dict(status = 300) > #$#nov json - z vsemi errorji zapiđšemo v sc_menu_data > script.update_record(sc_menu_data = valJson["formJson"]) > #če obstajjo errorji pol konc > if 1!=1:#valJson["errors"]: > #skripta gre v status 91, kar pomen da je user ne more dat > računat > script.update_record(sc_status = 91) > #print valJson["errors"] > return dict(status = 200) > > else: > script.update_record(sc_status = 11) > if os.path.isfile(outPath): > os.remove(outPath) > TranslateData(script.sc_menu_data, path, id, org) > # Run woshi engine > path_1 = os.path.join(path, 'e1') > os.chdir(path_1) > #p = subprocess.Popen(['w_parameter.bat', id], shell=True, > stdout = subprocess.PIPE) > p = subprocess.Popen(['woshi_engine.exe', id], shell=True, > stdout = subprocess.PIPE) > return dict(status = 1) > > except Exception as e: > script.update_record(sc_status = 10) > exc_type, exc_obj, exc_tb = sys.exc_info() > fname = os.path.split(exc_tb.tb_frame.f_code.co_filename)[1] > > print(exc_type, fname, exc_tb.tb_lineno) > print e.__doc__ > print e.message > > return dict(status = 666) > > >
-- Resources: - http://web2py.com - http://web2py.com/book (Documentation) - http://github.com/web2py/web2py (Source code) - https://code.google.com/p/web2py/issues/list (Report Issues) --- You received this message because you are subscribed to the Google Groups "web2py-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to web2py+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.