def __init__(self, ident: int, host="localhost", username="******", force=True, timeout=None, exit_kill=True): """ Creates a target control manager for a given ident :param ident: The ident to connect to. :param host: The hostname. :param username: The username to use when connecting. :param force: Whether to force the connection. :param timeout: The timeout in seconds before aborting the run. :param exit_kill: Whether to kill the process when the control loop ends. """ self._pid = 0 self._captures = [] self._children = [] self.control = rd.CreateTargetControl(host, ident, username, force) self._timeout = timeout if self._timeout is None: self._timeout = 60 self._exit_kill = exit_kill if self.control is None: raise RuntimeError("Couldn't connect target control") self._pid = self.control.GetPID()
raise RuntimeError(f"Couldn't launch {exe}, got error {str(result.status)}") # Spin up a thread to keep the remote server connection alive while we make a capture, # as it will time out after 5 seconds of inactivity def ping_remote(remote, kill): success = True while success and not kill.is_set(): success = remote.Ping() time.sleep(1) kill = threading.Event() ping_thread = threading.Thread(target=ping_remote, args=(remote,kill)) ping_thread.start() # Create target control connection target = rd.CreateTargetControl(URL, result.ident, 'remote_capture.py', True) if target is None: kill.set() ping_thread.join() remote.ShutdownServerAndConnection() raise RuntimeError(f"Couldn't connect to target control for {exe}") print("Connected - waiting for desired capture") # Wait for the capture condition we want capture_condition() print("Triggering capture") target.TriggerCapture(1)