redrat_service.py 3.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. # -*- coding: UTF-8 -*-
  2. import sys
  3. import os
  4. from os import path, access, R_OK
  5. import subprocess
  6. from subprocess import CalledProcessError
  7. import time
  8. from ssat_sdk.service.service_config import *
  9. from ssat_sdk.sat_environment import *
  10. class RedRatService():
  11. # 类静态变量
  12. Service_Name = "redrat"
  13. HubCmd_exe = sys.prefix + r"/Tools/RedHatHub/RedRatHubCmd.exe"
  14. cmdline = ""
  15. child = None
  16. def __init__(self):
  17. self.status = 0
  18. self.serviceConfig = ServiceConfig()
  19. rcuDevice = getRCUDeviceSelected()
  20. if (rcuDevice.lower() == "redrat3"):
  21. RedRatService.HubCmd_exe = sys.prefix + r"/Tools/RedHatHub/RedRatHubCmd.exe"
  22. elif(rcuDevice.lower() == "redrat4"):
  23. RedRatService.HubCmd_exe = sys.prefix + r"/Tools/RedRatHub-V4.28/RedRatHubCmd.exe"
  24. if path.exists(RedRatService.HubCmd_exe) and path.isfile(RedRatService.HubCmd_exe) and access(
  25. RedRatService.HubCmd_exe, R_OK):
  26. print r"RedRatHubCmd.exe : exists and is readable"
  27. else:
  28. print r"RedRatHubCmd.exe : file is missing or is not readable, please check if Python27\Tools\RedRat\RedRatHubCmd.exe is exists"
  29. # 强制结束所有RedRatHubCmd.exe
  30. self.taskkill()
  31. print "RedRatHubCmd Start!"
  32. def taskkill(self):
  33. # 强制结束任务管理器所有 强制结束所有RedRatHubCmd.exe 进程
  34. try:
  35. command = 'taskkill /F /IM RedRatHubCmd.exe'
  36. os.system(command)
  37. except Exception, e:
  38. print u"没有杀死RedRatHubCmd进程:", e
  39. def isRunning(self, signalxml, port, conns):
  40. if RedRatService.child is not None and RedRatService.child.poll() is None:
  41. return True
  42. else:
  43. return False
  44. def interrupt(self):
  45. if RedRatService.child is not None and RedRatService.child.poll() is None:
  46. RedRatService.child.kill()
  47. def getChild(self):
  48. return RedRatService.child
  49. def initRedRat(self):
  50. print u"初始化红老鼠设备"
  51. self.interrupt()
  52. # signalxml = self.serviceConfig.getRedRatHubSignalXml()
  53. signalxml = getRCUSelectedFilePath()
  54. port = self.serviceConfig.getRedRatHubPort()
  55. print 'port:', port
  56. if signalxml is None:
  57. print u"初始化红老鼠失败,默认信号文件未填"
  58. self.status = 0
  59. return 0, u"初始化红老鼠失败,默认信号文件未填"
  60. if path.exists(RedRatService.HubCmd_exe) and path.isfile(RedRatService.HubCmd_exe) and access(
  61. RedRatService.HubCmd_exe, R_OK):
  62. # 启动exe
  63. RedRatService.cmdline = '"' + RedRatService.HubCmd_exe + '" "' + signalxml + '" --port=' + str(port)
  64. print 'RedRatService.cmdline :', RedRatService.cmdline
  65. RedRatService.child = subprocess.Popen(RedRatService.cmdline, stdout=subprocess.PIPE)
  66. self.status = 1
  67. return 1, ''
  68. # if RedRatService.child is not None and RedRatService.child.poll() is None:
  69. # print 'paodaozhili'
  70. # self.status = 1
  71. # print RedRatService.child.stdout.read()
  72. # # return 1, ''
  73. # else:
  74. # self.status = 0
  75. # return 0, u'正常退出'
  76. else:
  77. self.status = 0
  78. return 0, 'RedRatHubCmd.exe文件不存在'
  79. def help(self):
  80. output = subprocess.check_output(RedRatService.HubCmd_exe + " " + "-?")
  81. print "\n*******RedRatService CMD help**********" + output
  82. def getStatus(self):
  83. return self.status