def kill_process(self, process_list): try: # for i in process_list: # print(i) logger.info('Star kill process:{}!'.format(i)) if i.find('om.exe') > -1: command = r'wmic process where name="{program}" delete'.format( program=i) else: command = 'taskkill /f /t /im {program}'.format(program=i) temp = os.system(command) # if self.is_admin(): # print("以管理员权限运行") # temp=os.system(command) # else: # if sys.version_info[0] == 3: # print("无管理员权限") # ctypes.windll.shell32.ShellExecuteW(None, "runas", sys.executable, __file__, None, 1) logger.info('End kill prcess:{} !'.format(i)) except Exception as e: logger.error( 'kill all process error!原因:{},filename:{},line:{}'.format( e, e.__traceback__.tb_frame.f_globals['__file__'], e.__traceback__.tb_lineno))
def api_check_object_task_by_status(status_id): try: new_check_object_task_url = check_object_task_url + '?status_id={}'.format( status_id) pr = requests.get(url=new_check_object_task_url, headers=pheaders) logger.info( f'-----url:{ new_check_object_task_url},返回:{pr.status_code}') if (pr.status_code == 200): return_dict = eval( pr.text.replace('null', 'None').replace('false', 'False').replace( 'true', 'True')) object_task_num = len(return_dict) return object_task_num else: logger.info( f'---------------check_id:{current_check_id}---------Failed :api_check_agv_commands! agv_list:{status_id},status_code:{pr.status_code}' ) return None except Exception as e: logger.error( f'---------------check_id:{current_check_id}---------api_check_agv_commands Error!!results:{e}' ) return None
def get_agv_info_from_docks(self): try: #打开xml文档 dom = minidom.parse(self.dockspath) #得到文档元素对象 root = dom.documentElement docks = root.getElementsByTagName('dock') choice_docks = random.sample(docks, int(self.need_get_agv_num)) agv_info = [] for sd in choice_docks: #dock点 docks_id = sd.getElementsByTagName("id")[0].childNodes[0].data docks_info = sd.getElementsByTagName("pos")[0] #x值、y值、坐标 x = docks_info.getAttribute("x") y = docks_info.getAttribute("y") angle = docks_info.getAttribute("angle") single_dock_info = (docks_id, x, y, angle) # print(docks_id,x,y,angle) logger.info(f'get docks info:{docks_id},{x},{y},{angle}') agv_info.append(single_dock_info) return agv_info except Exception as e: logger.error( 'get_agv_info_from_docks error!原因:{},filename:{},line:{}'. format(e, e.__traceback__.tb_frame.f_globals['__file__'], e.__traceback__.tb_lineno))
def check_sheet_and_clear_content(self, excel_name, sheet_name, title_list): try: isexists = os.path.exists(excel_name) if isexists: wb = xlrd.open_workbook(excel_name) sheet_names = wb.sheet_names() # print(f'sheet_names:{sheet_names},{self.sheet_name in sheet_names}') if (sheet_name not in sheet_names): logger.info( f'current file:{excel_name} unexists sheet:{sheet_name},need create sheet!' ) self.Add_sheet(excel_name, sheet_name) self.write_title_cell(excel_name, sheet_name, title_list) else: sheet = wb.sheet_by_name(self.sheet_name) current_title = sheet.row_values(0) current_rows = sheet.nrows checkinfo = [ xx for xx in title_list if xx not in current_title ] if (checkinfo != [] or current_rows > 1): logger.info( f'current file:{excel_name} title error or have content,detele sheet and add new!' ) self.remove_sheet(excel_name, sheet_name) self.Add_sheet(excel_name, sheet_name) self.write_title_cell(excel_name, sheet_name, title_list) except Exception as e: logger.error( 'check_sheet_and_clear_content error!原因:{},filename:{},line:{}' .format(e, e.__traceback__.tb_frame.f_globals['__file__'], e.__traceback__.tb_lineno))
def copy_layout_to_general_process(self): try: logger.info('------start copy layout and eg.-----') dispath_l = os.path.join(self.dispathpath, 'etc') enginepath_l = os.path.join(self.enginepath, 'etc') if not os.path.exists(dispath_l): os.makedirs(dispath_l) if not os.path.exists(enginepath_l): os.makedirs(enginepath_l) # 清空文件 self.detele_path(dispath_l) self.detele_path(enginepath_l) # 复制文件 dirlist = os.listdir(self.layoutpath) for dir in dirlist: source = os.path.join(self.layoutpath, dir) if (dir == 'docks.xml' or dir == 'layout.xml'): shutil.copy(source, dispath_l) logger.info('copy dir:{} to "{}"'.format( source, dispath_l)) shutil.copy(source, enginepath_l) logger.info('copy dir:{} to "{}"'.format( source, enginepath_l)) else: shutil.copy(source, enginepath_l) logger.info('copy dir:{} to "{}"'.format( source, enginepath_l)) logger.info('------end copy layout and eg.-----') except Exception as e: logger.error('copy layout error!原因:{}'.format(e))
def func_engine(self): try: logger.info('Start open engine process!') results = os.startfile(self.engine_process_path) logger.info( 'End open engine process!,return content:{}'.format(results)) except Exception as e: logger.error('open engine process error!原因:{}'.format(e))
def func_gui_web(self): try: logger.info('start open gui in web!') command = r'cd /d ' + self.chromepath + ' && start chrome.exe http://127.0.0.1:2000' results = os.system(command) logger.info( 'End open gui in web!return content:{}'.format(results)) except Exception as e: logger.error('open gui in web error!原因:{}'.format(e))
def func_rest_api(self): try: logger.info('start open rest_api process!') command1 = r'cd /d ' + self.rest_api_path + ' && start ' + self.rest_api_process_name results = os.system(command1) logger.info( 'End open rest_api process!return content:{}'.format(results)) except Exception as e: logger.error('open rest_api error!原因:{}'.format(e))
def func_guiservice(self): try: logger.info('start guiservice process!') command = r'cd /d ' + configs.guiservice_path + ' && start ' + configs.guiservice_process_name results = os.system(command) logger.info('End open guiservice process!return content:{}'.format( results)) except Exception as e: logger.error('open guiservice error!原因:{}'.format(e))
def func_nginx(self): try: logger.info('start ngnix process!') command = r'cd /d ' + configs.nginx_path + ' && start ' + configs.nginx_process_name results = os.system(command) logger.info( 'End open nginx process!return content:{}'.format(results)) except Exception as e: logger.error('open nginx error!原因:{}'.format(e))
def func_om(self): try: logger.info('Start open om process!') # results=os.startfile(self.engine_process_path) command = r'cd /d ' + self.ompath + ' && start ' + configs.om_process_name results = os.system(command) logger.info( 'End open om process!,return content:{}'.format(results)) except Exception as e: logger.error('open om process error!原因:{}'.format(e))
def func_dispath(self): try: logger.info('Start open dispath process!') command = r'cd /d ' + self.dispathpath + ' && start ' + self.i_dispath_process_name results = os.system(command) # results=os.startfile(self.dispath_process_path) logger.info( 'End open dispath process!,return content:{}'.format(results)) except Exception as e: logger.error('open dispath process error!原因:{}'.format(e))
def func_monitor(self): try: logger.info('start open monitor process!') command = r'cd /d ' + self.i_monitorpath + ' && start ' + self.i_monitor_process_name results = os.system(command) logger.info( 'End open monitor process!return content:{}'.format(results)) except Exception as e: logger.error('open monitor error!原因:{}'.format(e))
def detele_path_files(self, path, de_file): try: de_path = os.path.join(path, de_file) if os.path.exists(de_path): os.remove(de_path) logger.info('start detele path :{} files:{}!'.format( path, de_file)) else: logger.info('path :{}not exists!'.format(de_path)) except Exception as e: logger.error('detele path :{} files error!原因:{}'.format(path, e))
def func_bsmonitor(self): try: logger.info('start open monitor') command = r'cd /d ' + self.webmonitorpath + ' && start ' + self.monitor_process_name + ' runserver 0.0.0.0:5006 --noreload' results = os.system(command) print(command) # print('monitor_open_process_path:{}'.format(self.monitor_open_process_path)) logger.info( 'End open monitor process!return content:{}'.format(results)) except Exception as e: logger.error('open monitor error!原因:{}'.format(e))
def func_rest_api(self): try: logger.info('start open rest_api process!') command1 = r'cd /d ' + self.rest_api_path + ' && start /min ' + self.rest_api_process_name results = os.system(command1) logger.info( 'End open rest_api process!return content:{}'.format(results)) except Exception as e: logger.error( 'open rest_api error!原因:{},filename:{},line:{}'.format( e, e.__traceback__.tb_frame.f_globals['__file__'], e.__traceback__.tb_lineno))
def func_open_webmonitor_web(self): try: logger.info('start webmonitor in web!') command = r'cd /d ' + self.chromepath + ' && start chrome.exe http://127.0.0.1:5006' results = os.system(command) logger.info( 'End webmonitor in web!return content:{}'.format(results)) except Exception as e: logger.error( 'open webmonitor in web error!原因:{},filename:{},line:{}'. format(e, e.__traceback__.tb_frame.f_globals['__file__'], e.__traceback__.tb_lineno))
def get_excel_info(self): try: workbook = xlrd.open_workbook(self.excelpath) sheet_names = workbook.sheet_names() for i in sheet_names: sheet = workbook.sheet_by_name(i) num = sheet.nrows - 1 title_list = sheet.row_values(0) logger.info('Excel表{}的标题栏是:{},内容有{}行'.format( i, title_list, num)) except Exception as e: logger.error('get_excel_info error!原因:{}'.format(e))
def delete_induct_log(self): try: logger.info('start delete induct process log!') process_path = [ self.dispathpath, self.enginepath, self.i_monitorpath ] for i in process_path: logpath = os.path.join(i, 'log') self.d.detele_path(logpath) logger.info('end delete induct process log!') except Exception as e: logger.error('delete induct process log error!原因:{}'.format(e))
def func_bsmonitor(self): try: logger.info('start open monitor') command = r'cd /d ' + self.webmonitorpath + ' && start /min ' + self.monitor_process_name + ' runserver 0.0.0.0:5006 --noreload' results = os.system(command) print(command) # print('monitor_open_process_path:{}'.format(self.monitor_open_process_path)) logger.info( 'End open monitor process!return content:{}'.format(results)) except Exception as e: logger.error('open monitor error!原因:{},filename:{},line:{}'.format( e, e.__traceback__.tb_frame.f_globals['__file__'], e.__traceback__.tb_lineno))
def func_om(self): try: logger.info('Start open om process!') # results=os.startfile(self.engine_process_path) command = r'cd /d ' + self.ompath + ' && start /min ' + configs.om_process_name results = os.system(command) logger.info( 'End open om process!,return content:{}'.format(results)) except Exception as e: logger.error( 'open om process error!原因:{},filename:{},line:{}'.format( e, e.__traceback__.tb_frame.f_globals['__file__'], e.__traceback__.tb_lineno))
def auto_start_main(self, agv_id): '''1;"in_system" 2;"out_system" 3;"online" 4;"offline" 5;"ready" 6;"not_ready" 7;"in_dispatch" 8;"out_dispatch" 9;"running" 10;"not_running" ''' '''10000;"AGV_COMMAND_TYPE_ADD";"vehicle management";"add agv into dispath engine" 10001;"AGV_COMMAND_TYPE_DELETE";"vehicle management";"delete agv from dispath engine" 10002;"AGV_COMMAND_TYPE_CREATE";"vehicle management";"create agv in dispath engine" 10003;"AGV_COMMAND_TYPE_DISTORY";"vehicle management";"distory agv in dispath engine" 10004;"AGV_COMMAND_TYPE_SET_READY";"vehicle management";"set ready agv" 10005;"AGV_COMMAND_TYPE_RUN";"vehicle management";"run agv"''' logger.info(f'===start auto start agv_id :{agv_id}===') while 1: agv_list = [] d = self.api_opt_check_agvs_info(agv_id) if d: agv_id = d[0]["agv_id"] agv_list.append(agv_id) status_id = d[0]["agv_management_status_id"] if (status_id == 2): if not (self.api_check_agv_commands( agv_id, 10000, [10, 11])): self.api_opt_add_agv(agv_list) if (status_id == 1): if not (self.api_check_agv_commands( agv_id, 10002, [10, 11])): self.api_opt_create_agv(agv_list) if (status_id == 3): if not (self.api_check_agv_commands( agv_id, 10004, [10, 11])): self.api_opt_setready_agv(agv_list) if (status_id == 5): if not (self.api_check_agv_commands( agv_id, 10005, [10, 11])): self.api_opt_run_agv(agv_list) if (status_id == 7 or status_id == 9): if agv_id not in self.current_indispathlogic_agv_id: self.current_indispathlogic_agv_id.append(agv_id) break time.sleep(3) logger.info(f'===end auto start agv_id :{agv_id}===')
def func_webvehicle(self): try: command = r'cd /d ' + os.path.join( configs.simpath) + ' && start /min webvehicle-go.exe' results = os.system(command) logger.info( f'------start webvehicle-go command:{command},return content:{results}' ) time.sleep(2) except Exception as e: logger.error( 'open webvehicle-go process error!原因:{},filename:{},line:{}'. format(e, e.__traceback__.tb_frame.f_globals['__file__'], e.__traceback__.tb_lineno))
def common_post_agv_opt_api(self, api_agv_opt_url, agv_list, caller_func_name): try: body = {"agv_list": agv_list} if isinstance(agv_list, list): body["agv_list"] = agv_list payload = json.dumps(body) pr = requests.post(url=api_agv_opt_url, data=payload, headers=self.pheaders) logger.info(f'接口url:{api_agv_opt_url},下发指令body:{payload}') results = dict( eval( pr.text.replace('null', 'None').replace( 'false', 'False').replace('true', 'True')))["msg"] if (pr.status_code == 200 and results == 'success'): suc_info = dict( eval( pr.text.replace('null', 'None').replace( 'false', 'False').replace( 'true', 'True')))["data"]["success_list"] suc_agv_id = [i["agv_id"] for i in suc_info] if suc_info != []: logger.info( f'api succ, and succ {caller_func_name},add_succ_agv_ids:{suc_info}' ) error_info = dict( eval( pr.text.replace('null', 'None').replace( 'false', 'False').replace( 'true', 'True')))["data"]["error_list"] if error_info != []: logger.info( f'api succ ,but error {caller_func_name},rertun error_agv_ids:{error_info}' ) else: logger.info( f'api fail,and fail{caller_func_name}, agv_list:{agv_list},status_code:{pr.status_code}' ) else: logger.info(f'传入参数Error !!{agv_list} is not list!') if suc_agv_id: return suc_agv_id else: return None except Exception as e: logger.error( f'Error :commmon_post_agv_opt_api:{caller_func_name} !!results:{e}' ) return None
def copy_layout_to_vehicles(self): try: if os.path.exists(configs.simpath): logger.info('------start copy layout to vehicles-----') for i in os.listdir(configs.simpath): if os.path.isdir(i): vehiclespath = os.path.join(configs.simpath, i) mappath = os.path.join(vehiclespath, 'etc\map') if not os.path.exists(mappath): os.makedirs(mappath) # 清空文件 self.detele_path(mappath) # 复制文件 dirlist = os.listdir(self.layoutpath) for dir in dirlist: source = os.path.join(self.layoutpath, dir) if (dir == 'docks.xml' or dir == 'layout.xml'): shutil.copy(source, mappath) logger.info('copy dir:{} to "{}"'.format( source, mappath)) logger.info('------end copy layout to vehicles-----') else: logger.info('path:{} not exists!'.format(configs.simpath)) except Exception as e: logger.error('copy layout to vehicles error!原因:{}'.format(e))
def db_kill(self): try: process_list = ['navicat.exe', 'pgAdmin3.exe'] for i in process_list: logger.info('Star kill db process:{}!'.format(i)) command = r'wmic process where name="{program}" delete'.format( program=i) # command='taskkill /f /t /im {}'.format(program=i) temp = os.system(command) logger.info('End kill db prcess:{} !return content::{}'.format( i, temp)) except Exception as e: logger.error('kill all db process error!原因:{}'.format(e))
def common_post_agv_opt_api(data_dict): try: body = {"data": []} suc_object_task_info = None if isinstance(data_dict, dict): if "object_id" in data_dict.keys( ) and "destination_location_id" in data_dict.keys(): data_dict["task_type_id"] = 2 data_dict["status_id"] = 2 body["data"].append(data_dict) payload = json.dumps(body) pr = requests.post(url=add_object_task_url, data=payload, headers=pheaders) logger.info(f'接口url:{add_object_task_url},下发指令body:{payload}') results = dict( eval( pr.text.replace('null', 'None').replace( 'false', 'False').replace('true', 'True')))["msg"] if (pr.status_code == 200 and results == 'success'): suc_object_task_info = \ dict(eval(pr.text.replace('null', 'None').replace('false', 'False').replace('true', 'True')))["data"][ "success_list"] if suc_object_task_info != []: logger.info( f'api succ, and succ {caller_func_name},add_succ_object_task_info:{suc_object_task_info}' ) error_info = \ dict(eval(pr.text.replace('null', 'None').replace('false', 'False').replace('true', 'True')))["data"][ "error_list"] if error_info != []: logger.info( f'api succ ,but error {caller_func_name},rertun error_object_task_info:{error_info}' ) else: logger.info( f'api fail,and fail{caller_func_name}, data_dict:{data_dict},status_code:{pr.status_code}' ) else: logger.info(f'传入参数Error !!{data_dict} is not dict!') return suc_object_task_info except Exception as e: logger.error( f'Error :commmon_post_agv_opt_api:{caller_func_name} !!results:{e}' ) return None
def modify_dbai(self): try: logger.info('Start modify dbai db config!') conf = configparser.ConfigParser() conf.read(self.dbai_dbconfig_path, encoding='utf-8') conf.set('database_connection', 'host', self.ip) conf.set('database_connection', 'port', self.port) conf.set('database_connection', 'database_name', self.dbname) conf.set('database_connection', 'user_name', self.dbuser) conf.set('database_connection', 'password', self.dbpassword) conf.write(open(self.dbai_dbconfig_path, 'w+', encoding='utf-8')) logger.info('End modify dbai db config!') except Exception as e: logger.error('Modify dbai db error!原因:{}'.format(e))
def delete_log(self, process_path): try: logger.info('start delete process:{} log!'.format(process_path)) for i in process_path: logpath = os.path.join(i, 'log') if os.path.exists(logpath): shutil.rmtree(logpath) logpath2 = os.path.join(i, 'TSLogs') if os.path.exists(logpath2): shutil.rmtree(logpath2) logger.info('end delete process:{} log!'.format(process_path)) except Exception as e: logger.error('delete process:{} log error!原因:{}'.format( process_path, e))
def modify_all_dispatch_xml(self): #新新建一个xml logger.info('--重新创建一个新的dispath_config.xml文件--') if os.path.exists(self.temp_file): os.unlink(self.temp_file) self.create_dispatch_config_xml(self.temp_file) self.petty_filename(self.temp_file, self.dispath_config_path) os.unlink(self.temp_file) #然后更改location self.modify_dispatchxml_location() self.modify_dispatchxml_location_relation() self.modify_dispatchxml_section() self.modify_dispatchxml_object()