def wait_for_exit(): try: code = process.wait() if sys.platform != "win32" and code < 0: # On POSIX, if the process was terminated by a signal, Popen will use # a negative returncode to indicate that - but the actual exit code of # the process is always an unsigned number, and can be determined by # taking the lowest 8 bits of that negative returncode. code &= 0xFF except Exception: log.exception("Couldn't determine process exit code:") code = -1 log.info("{0} exited with code {1}", describe(), code) output.wait_for_remaining_output() # Determine whether we should wait or not before sending "exited", so that any # follow-up "terminate" requests don't affect the predicates. should_wait = any(pred(code) for pred in wait_on_exit_predicates) try: launcher.channel.send_event("exited", {"exitCode": code}) except Exception: pass if should_wait: _wait_for_user_input() try: launcher.channel.send_event("terminated") except Exception: pass
def wait_for_exit(): from ptvsd.launcher import adapter, output try: code = process.wait() if platform.system() != "Windows" and code < 0: # On POSIX, if the process was terminated by a signal, Popen will use # a negative returncode to indicate that - but the actual exit code of # the process is always an unsigned number, and can be determined by # taking the lowest 8 bits of that negative returncode. code &= 0xFF except Exception: log.exception("Couldn't determine process exit code:") code = -1 log.info("{0} exited with code {1}", describe(), code) output.wait_for_remaining_output() try: adapter.channel.send_event("exited", {"exitCode": code}) except Exception: pass if any(pred(code) for pred in wait_on_exit_predicates): _wait_for_user_input() try: adapter.channel.send_event("terminated") except Exception: pass
def wait_for_exit(): from ptvsd.launcher import adapter, output try: code = process.wait() except Exception: log.exception("Couldn't determine process exit code:") code = -1 log.info("{0} exited with code {1}", describe(), code) output.wait_for_remaining_output() try: adapter.channel.send_event("exited", {"exitCode": code}) except Exception: pass if any(pred(code) for pred in wait_on_exit_predicates): _wait_for_user_input() try: adapter.channel.send_event("terminated") except Exception: pass