def get_log_files(out_dir, app_name): if log.get_level() > 2: flog_out = open(os.path.join(out_dir, app_name + '_out.log'), 'wt') flog_err = open(os.path.join(out_dir, app_name + '_err.log'), 'wt') logger.debug('Redirecting ' + app_name + ' output to ' + app_name + '*.log') else: flog_out = flog_err = DEVNULL return (flog_out, flog_err)
def get_windows(all=False): cmd = ['search', '--name', '.*'] if not all: cmd.insert(1, '--onlyvisible') ids = xdotool(cmd).splitlines() res = [] for i in ids: name = '' try: name = xdotool(['getwindowname', i])[:-1] except CalledProcessError: name = '** No longer there **' res.append((i, name)) if log.get_level() >= 2: logger.debug('get_windows {} {}'.format(i, name)) if log.get_level() >= 2: logger.debug('get_windows end of list') return res
def debug_window(id=None): # pragma: no cover if log.get_level() < 2: return if shutil.which('xprop'): if id is None: try: id = xdotool(['getwindowfocus']).rstrip() except CalledProcessError: logger.debug('xdotool getwindowfocus failed!') pass if id: call(['xprop', '-id', id])
def debug_window(id=None): # pragma: no cover if log.get_level() < 2: return if shutil.which('xprop'): if id is None: try: id = xdotool(['getwindowfocus']).rstrip() except CalledProcessError: logger.debug('xdotool getwindowfocus failed!') pass if id: call(['xprop', '-id', id]) if shutil.which('vmstat'): call(['vmstat', '-s']) if shutil.which('uptime'): call(['uptime']) logger.debug("Visible windows:") for i in get_windows(): logger.debug("Window ID: `{}` ; name: `{}`".format(i[0], i[1])) logger.debug("All windows:") for i in get_windows(all=True): logger.debug("Window ID: `{}` ; name: `{}`".format(i[0], i[1]))
def wait_xserver(out_dir, num_try): global time_out_scale timeout = 10 * time_out_scale DELAY = 0.5 logger.debug('Waiting for virtual X server ...') try: logger.debug('Current DISPLAY is ' + os.environ['DISPLAY']) except KeyError: logger.error('Missing DISPLAY on wait_xserver!') if shutil.which('setxkbmap'): cmd = ['setxkbmap', '-query'] elif shutil.which('xset'): # pragma: no cover cmd = ['xset', 'q'] else: # pragma: no cover cmd = ['ls'] logger.warning( 'No setxkbmap nor xset available, unable to verify if X is running' ) for i in range(int(timeout / DELAY)): logger.debug('Checking using ' + str(cmd)) flog_out, flog_err = get_log_files(out_dir, cmd[0]) ret = call(cmd, stdout=flog_out, stderr=flog_err, close_fds=True) if not ret: time_wait = 0.5 * (num_try + 1) * (num_try + 1) * time_out_scale if log.get_level() > 2: logger.debug(str(cmd) + ' returned 0') logger.debug( 'Waiting {} seconds before using the X server'.format( time_wait)) # On GitLab I saw setxkbmap success and recordmydesktop and KiCad failing to connect to X # One possible solution is a wait here. # Another is detecting KiCad exited. time.sleep(time_wait) return logger.debug(' Retry') time.sleep(DELAY) raise RuntimeError('Timed out waiting for virtual X server')