# -*- coding: UTF-8 -*- import sys import os from os import path, access, R_OK import subprocess from subprocess import CalledProcessError import time from ssat_sdk.service.service_config import * from ssat_sdk.sat_environment import * class RedRatService(): # 类静态变量 Service_Name = "redrat" HubCmd_exe = sys.prefix + r"/Tools/RedHatHub/RedRatHubCmd.exe" cmdline = "" child = None def __init__(self): self.status = 0 self.serviceConfig = ServiceConfig() rcuDevice = getRCUDeviceSelected() if (rcuDevice.lower() == "redrat3"): RedRatService.HubCmd_exe = sys.prefix + r"/Tools/RedHatHub/RedRatHubCmd.exe" elif(rcuDevice.lower() == "redrat4"): RedRatService.HubCmd_exe = sys.prefix + r"/Tools/RedRatHub-V4.28/RedRatHubCmd.exe" if path.exists(RedRatService.HubCmd_exe) and path.isfile(RedRatService.HubCmd_exe) and access( RedRatService.HubCmd_exe, R_OK): print r"RedRatHubCmd.exe : exists and is readable" else: print r"RedRatHubCmd.exe : file is missing or is not readable, please check if Python27\Tools\RedRat\RedRatHubCmd.exe is exists" # 强制结束所有RedRatHubCmd.exe self.taskkill() print "RedRatHubCmd Start!" def taskkill(self): # 强制结束任务管理器所有 强制结束所有RedRatHubCmd.exe 进程 try: command = 'taskkill /F /IM RedRatHubCmd.exe' os.system(command) except Exception, e: print u"没有杀死RedRatHubCmd进程:", e def isRunning(self, signalxml, port, conns): if RedRatService.child is not None and RedRatService.child.poll() is None: return True else: return False def interrupt(self): if RedRatService.child is not None and RedRatService.child.poll() is None: RedRatService.child.kill() def getChild(self): return RedRatService.child def initRedRat(self): print u"初始化红老鼠设备" self.interrupt() # signalxml = self.serviceConfig.getRedRatHubSignalXml() signalxml = getRCUSelectedFilePath() port = self.serviceConfig.getRedRatHubPort() print 'port:', port if signalxml is None: print u"初始化红老鼠失败,默认信号文件未填" self.status = 0 return 0, u"初始化红老鼠失败,默认信号文件未填" if path.exists(RedRatService.HubCmd_exe) and path.isfile(RedRatService.HubCmd_exe) and access( RedRatService.HubCmd_exe, R_OK): # 启动exe RedRatService.cmdline = '"' + RedRatService.HubCmd_exe + '" "' + signalxml + '" --port=' + str(port) print 'RedRatService.cmdline :', RedRatService.cmdline RedRatService.child = subprocess.Popen(RedRatService.cmdline, stdout=subprocess.PIPE) self.status = 1 return 1, '' # if RedRatService.child is not None and RedRatService.child.poll() is None: # print 'paodaozhili' # self.status = 1 # print RedRatService.child.stdout.read() # # return 1, '' # else: # self.status = 0 # return 0, u'正常退出' else: self.status = 0 return 0, 'RedRatHubCmd.exe文件不存在' def help(self): output = subprocess.check_output(RedRatService.HubCmd_exe + " " + "-?") print "\n*******RedRatService CMD help**********" + output def getStatus(self): return self.status