Python subprocess.CREATE_NEW_PROCESS_GROUP Examples
The following are 30
code examples of subprocess.CREATE_NEW_PROCESS_GROUP().
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example.
You may also want to check out all available functions/classes of the module
subprocess
, or try the search function
.
Example #1
Source File: _subprocess.py From pyuavcan with MIT License | 6 votes |
def __init__(self, *args: str, environment_variables: typing.Optional[typing.Dict[str, str]] = None): cmd = _make_process_args(*args) _logger.info('Starting background child process: %s', ' '.join(cmd)) try: # Windows-specific. # If the current process group is used, CTRL_C_EVENT will kill the parent and everyone in the group! creationflags: int = subprocess.CREATE_NEW_PROCESS_GROUP # type: ignore except AttributeError: # Not on Windows. creationflags = 0 # Buffering must be DISABLED, otherwise we can't read data on Windows after the process is interrupted. # For some reason stdout is not flushed at exit there. self._inferior = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=sys.stderr, encoding='utf8', env=_get_env(environment_variables), creationflags=creationflags, bufsize=0)
Example #2
Source File: fishnet.py From fishnet with GNU General Public License v3.0 | 6 votes |
def open_process(command, cwd=None, shell=True, _popen_lock=threading.Lock()): kwargs = { "shell": shell, "stdout": subprocess.PIPE, "stderr": subprocess.STDOUT, "stdin": subprocess.PIPE, "bufsize": 1, # Line buffered "universal_newlines": True, } if cwd is not None: kwargs["cwd"] = cwd # Prevent signal propagation from parent process try: # Windows kwargs["creationflags"] = subprocess.CREATE_NEW_PROCESS_GROUP except AttributeError: # Unix kwargs["preexec_fn"] = os.setpgrp with _popen_lock: # Work around Python 2 Popen race condition return subprocess.Popen(command, **kwargs)
Example #3
Source File: __init__.py From mlflow with Apache License 2.0 | 6 votes |
def _run_mlflow_run_cmd(mlflow_run_arr, env_map): """ Invoke ``mlflow run`` in a subprocess, which in turn runs the entry point in a child process. Returns a handle to the subprocess. Popen launched to invoke ``mlflow run``. """ final_env = os.environ.copy() final_env.update(env_map) # Launch `mlflow run` command as the leader of its own process group so that we can do a # best-effort cleanup of all its descendant processes if needed if sys.platform == "win32": return subprocess.Popen( mlflow_run_arr, env=final_env, universal_newlines=True, creationflags=subprocess.CREATE_NEW_PROCESS_GROUP) else: return subprocess.Popen( mlflow_run_arr, env=final_env, universal_newlines=True, preexec_fn=os.setsid)
Example #4
Source File: test_functional.py From cotyledon with Apache License 2.0 | 6 votes |
def setUp(self): super(Base, self).setUp() self.lines = [] self.sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) self.sock.bind(("127.0.0.1", 0)) self.t = threading.Thread(target=self.readlog) self.t.daemon = True self.t.start() examplepy = os.path.join(os.path.dirname(__file__), "examples.py") if os.name == 'posix': kwargs = { 'preexec_fn': os.setsid } else: kwargs = { 'creationflags': subprocess.CREATE_NEW_PROCESS_GROUP } self.subp = subprocess.Popen(['python', examplepy, self.name, str(self.sock.getsockname()[1])], **kwargs)
Example #5
Source File: test_utils.py From cmd2 with MIT License | 6 votes |
def pr_none(): import subprocess # Start a long running process so we have time to run tests on it before it finishes # Put the new process into a separate group so its signal are isolated from ours kwargs = dict() if sys.platform.startswith('win'): command = 'timeout -t 5 /nobreak' kwargs['creationflags'] = subprocess.CREATE_NEW_PROCESS_GROUP else: command = 'sleep 5' kwargs['start_new_session'] = True proc = subprocess.Popen(command, shell=True, **kwargs) pr = cu.ProcReader(proc, None, None) return pr
Example #6
Source File: subprocess42.py From luci-py with Apache License 2.0 | 6 votes |
def terminate(self): """Tries to do something saner on Windows that the stdlib. Windows: self.detached/CREATE_NEW_PROCESS_GROUP determines what can be used: - If set, only SIGBREAK can be sent and it is sent to a single process. - If not set, in theory only SIGINT can be used and *all processes* in the processgroup receive it. In practice, we just kill the process. See http://msdn.microsoft.com/library/windows/desktop/ms683155.aspx The default on Windows is to call TerminateProcess() always, which is not useful. On Posix, always send SIGTERM. """ try: if sys.platform == 'win32' and self.detached: return self.send_signal(signal.CTRL_BREAK_EVENT) super(Popen, self).terminate() except OSError: # The function will throw if the process terminated in-between. Swallow # this. pass
Example #7
Source File: handler.py From timeflux with MIT License | 5 votes |
def launch_windows(args, port=10000): """Launch a subprocess and await connection to a TCP server.""" try: server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server.setblocking(False) server.bind(("localhost", port)) server.listen(1) except: _exit_with_error(f"Could not start server on port {port}.") try: # flags = subprocess.CREATE_NEW_PROCESS_GROUP | subprocess.DETACHED_PROCESS flags = subprocess.HIGH_PRIORITY_CLASS process = subprocess.Popen(args, creationflags=flags) except: _exit_with_error(f"Invalid arguments: {args}") while True: try: # Kill the process if a connection is received server.accept() process.send_signal(signal.CTRL_C_EVENT) break except BlockingIOError: try: # Exit the loop is the process is already dead process.wait(0.1) break except subprocess.TimeoutExpired: pass
Example #8
Source File: test_win.py From aiorun with Apache License 2.0 | 5 votes |
def test_sig(): """Basic SIGTERM""" proc = sp.Popen( [sys.executable, "tests/fake_main.py"], stdout=sp.PIPE, stderr=sp.STDOUT, creationflags=sp.CREATE_NEW_PROCESS_GROUP, ) time.sleep(0.5) # proc.send_signal(signal.CTRL_BREAK_EVENT) # os.kill(proc.pid, signal.CTRL_C_EVENT) os.kill(proc.pid, signal.CTRL_BREAK_EVENT) print("Send signal") proc.wait(timeout=5) stdout = proc.stdout.read().decode() print(stdout) assert proc.returncode == 0 expected = [ "Entering run()", "Entering shutdown phase", "Cancelling pending tasks", "Closing the loop", "Bye!", ] for phrase in expected: assert phrase in stdout
Example #9
Source File: test_os.py From CTFCrackTools-V2 with GNU General Public License v3.0 | 5 votes |
def _kill_with_event(self, event, name): tagname = "test_os_%s" % uuid.uuid1() m = mmap.mmap(-1, 1, tagname) m[0] = '0' # Run a script which has console control handling enabled. proc = subprocess.Popen([sys.executable, os.path.join(os.path.dirname(__file__), "win_console_handler.py"), tagname], creationflags=subprocess.CREATE_NEW_PROCESS_GROUP) # Let the interpreter startup before we send signals. See #3137. count, max = 0, 20 while count < max and proc.poll() is None: if m[0] == '1': break time.sleep(0.5) count += 1 else: self.fail("Subprocess didn't finish initialization") os.kill(proc.pid, event) # proc.send_signal(event) could also be done here. # Allow time for the signal to be passed and the process to exit. time.sleep(0.5) if not proc.poll(): # Forcefully kill the process if we weren't able to signal it. os.kill(proc.pid, signal.SIGINT) self.fail("subprocess did not stop on {}".format(name))
Example #10
Source File: running.py From thonny with MIT License | 5 votes |
def _create_python_process( python_exe, args, stdin=None, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=False, env=None, universal_newlines=True, ): cmd = [python_exe] + args if running_on_windows(): creationflags = subprocess.CREATE_NEW_PROCESS_GROUP startupinfo = subprocess.STARTUPINFO() startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW else: startupinfo = None creationflags = 0 proc = subprocess.Popen( cmd, stdin=stdin, stdout=stdout, stderr=stderr, shell=shell, env=env, universal_newlines=universal_newlines, startupinfo=startupinfo, creationflags=creationflags, ) proc.cmd = cmd return proc
Example #11
Source File: Processing.py From coala with GNU Affero General Public License v3.0 | 5 votes |
def create_process_group(command_array, **kwargs): if platform.system() == 'Windows': # pragma posix: no cover proc = subprocess.Popen( command_array, creationflags=subprocess.CREATE_NEW_PROCESS_GROUP, **kwargs) else: # pragma nt: no cover proc = subprocess.Popen(command_array, preexec_fn=os.setsid, **kwargs) return proc
Example #12
Source File: test_os.py From Project-New-Reign---Nemesis-Main with GNU General Public License v3.0 | 5 votes |
def _kill_with_event(self, event, name): tagname = "test_os_%s" % uuid.uuid1() m = mmap.mmap(-1, 1, tagname) m[0] = 0 # Run a script which has console control handling enabled. proc = subprocess.Popen([sys.executable, os.path.join(os.path.dirname(__file__), "win_console_handler.py"), tagname], creationflags=subprocess.CREATE_NEW_PROCESS_GROUP) # Let the interpreter startup before we send signals. See #3137. count, max = 0, 100 while count < max and proc.poll() is None: if m[0] == 1: break time.sleep(0.1) count += 1 else: # Forcefully kill the process if we weren't able to signal it. os.kill(proc.pid, signal.SIGINT) self.fail("Subprocess didn't finish initialization") os.kill(proc.pid, event) # proc.send_signal(event) could also be done here. # Allow time for the signal to be passed and the process to exit. time.sleep(0.5) if not proc.poll(): # Forcefully kill the process if we weren't able to signal it. os.kill(proc.pid, signal.SIGINT) self.fail("subprocess did not stop on {}".format(name))
Example #13
Source File: test_pytest_cov.py From pytest-cov with MIT License | 5 votes |
def test_cleanup_on_sigterm_sig_break(testdir, setup): # worth a read: https://stefan.sofa-rockers.org/2013/08/15/handling-sub-process-hierarchies-python-linux-os-x/ script = testdir.makepyfile(''' import os, signal, subprocess, sys, time def test_run(): proc = subprocess.Popen( [sys.executable, __file__], stdout=subprocess.PIPE, stderr=subprocess.STDOUT, creationflags=subprocess.CREATE_NEW_PROCESS_GROUP, shell=True ) time.sleep(1) proc.send_signal(signal.CTRL_BREAK_EVENT) stdout, stderr = proc.communicate() assert not stderr assert stdout in [b"^C", b"", b"captured IOError(4, 'Interrupted function call')\\n"] if __name__ == "__main__": from pytest_cov.embed import cleanup_on_signal, cleanup ''' + setup[0] + ''' try: time.sleep(10) except BaseException as exc: print("captured %r" % exc) ''') result = testdir.runpytest('-vv', '--cov=%s' % script.dirpath(), '--cov-report=term-missing', script) result.stdout.fnmatch_lines([ '*- coverage: platform *, python * -*', 'test_cleanup_on_sigterm* %s' % setup[1], '*1 passed*' ]) assert result.ret == 0
Example #14
Source File: test_os.py From gcblue with BSD 3-Clause "New" or "Revised" License | 5 votes |
def _kill_with_event(self, event, name): tagname = "test_os_%s" % uuid.uuid1() m = mmap.mmap(-1, 1, tagname) m[0] = '0' # Run a script which has console control handling enabled. proc = subprocess.Popen([sys.executable, os.path.join(os.path.dirname(__file__), "win_console_handler.py"), tagname], creationflags=subprocess.CREATE_NEW_PROCESS_GROUP) # Let the interpreter startup before we send signals. See #3137. count, max = 0, 20 while count < max and proc.poll() is None: if m[0] == '1': break time.sleep(0.5) count += 1 else: self.fail("Subprocess didn't finish initialization") os.kill(proc.pid, event) # proc.send_signal(event) could also be done here. # Allow time for the signal to be passed and the process to exit. time.sleep(0.5) if not proc.poll(): # Forcefully kill the process if we weren't able to signal it. os.kill(proc.pid, signal.SIGINT) self.fail("subprocess did not stop on {}".format(name))
Example #15
Source File: services.py From ray with Apache License 2.0 | 5 votes |
def __init__(self, *args, **kwargs): # CREATE_NEW_PROCESS_GROUP is used to send Ctrl+C on Windows: # https://docs.python.org/3/library/subprocess.html#subprocess.Popen.send_signal new_pgroup = subprocess.CREATE_NEW_PROCESS_GROUP flags_to_add = 0 if ray.utils.detect_fate_sharing_support(): # If we don't have kernel-mode fate-sharing, then don't do this # because our children need to be in out process group for # the process reaper to properly terminate them. flags_to_add = new_pgroup flags_key = "creationflags" if flags_to_add: kwargs[flags_key] = (kwargs.get(flags_key) or 0) | flags_to_add self._use_signals = (kwargs[flags_key] & new_pgroup) super(ConsolePopen, self).__init__(*args, **kwargs)
Example #16
Source File: nni_client.py From nni with MIT License | 5 votes |
def _create_process(cmd): if sys.platform == 'win32': process = subprocess.Popen(cmd, stdout=subprocess.PIPE, creationflags=subprocess.CREATE_NEW_PROCESS_GROUP) else: process = subprocess.Popen(cmd, stdout=subprocess.PIPE) while process.poll() is None: output = process.stdout.readline() if output: print(output.decode('utf-8').strip()) return process.returncode
Example #17
Source File: ipc.py From dagster with Apache License 2.0 | 5 votes |
def open_ipc_subprocess(parts, **kwargs): ''' Sets new process group flags on Windows to support graceful termination. ''' check.list_param(parts, 'parts', str) creationflags = 0 if sys.platform == 'win32': creationflags = subprocess.CREATE_NEW_PROCESS_GROUP return subprocess.Popen(parts, creationflags=creationflags, **kwargs)
Example #18
Source File: test_os.py From ironpython3 with Apache License 2.0 | 5 votes |
def _kill_with_event(self, event, name): tagname = "test_os_%s" % uuid.uuid1() m = mmap.mmap(-1, 1, tagname) m[0] = 0 # Run a script which has console control handling enabled. proc = subprocess.Popen([sys.executable, os.path.join(os.path.dirname(__file__), "win_console_handler.py"), tagname], creationflags=subprocess.CREATE_NEW_PROCESS_GROUP) # Let the interpreter startup before we send signals. See #3137. count, max = 0, 100 while count < max and proc.poll() is None: if m[0] == 1: break time.sleep(0.1) count += 1 else: # Forcefully kill the process if we weren't able to signal it. os.kill(proc.pid, signal.SIGINT) self.fail("Subprocess didn't finish initialization") os.kill(proc.pid, event) # proc.send_signal(event) could also be done here. # Allow time for the signal to be passed and the process to exit. time.sleep(0.5) if not proc.poll(): # Forcefully kill the process if we weren't able to signal it. os.kill(proc.pid, signal.SIGINT) self.fail("subprocess did not stop on {}".format(name))
Example #19
Source File: popen_spawn.py From pipenv-sublime with MIT License | 5 votes |
def __init__(self, cmd, timeout=30, maxread=2000, searchwindowsize=None, logfile=None, cwd=None, env=None, encoding=None, codec_errors='strict'): super(PopenSpawn, self).__init__(timeout=timeout, maxread=maxread, searchwindowsize=searchwindowsize, logfile=logfile, encoding=encoding, codec_errors=codec_errors) kwargs = dict(bufsize=0, stdin=subprocess.PIPE, stderr=subprocess.STDOUT, stdout=subprocess.PIPE, cwd=cwd, env=env) if sys.platform == 'win32': startupinfo = subprocess.STARTUPINFO() startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW kwargs['startupinfo'] = startupinfo kwargs['creationflags'] = subprocess.CREATE_NEW_PROCESS_GROUP if isinstance(cmd, string_types) and sys.platform != 'win32': cmd = shlex.split(cmd, posix=os.name == 'posix') self.proc = subprocess.Popen(cmd, **kwargs) self.pid = self.proc.pid self.closed = False self._buf = self.string_type() self._read_queue = Queue() self._read_thread = threading.Thread(target=self._read_incoming) self._read_thread.setDaemon(True) self._read_thread.start()
Example #20
Source File: bls.py From python_banyan with GNU Affero General Public License v3.0 | 5 votes |
def spawn_local(self, idx): """ This method launches processes that are needed to run on this computer :param idx: An index into launch_db """ # get the launch entry in launch_db db_entry = self.launch_db[idx] # skip over the entry for the backplane # launch the process either in its own window or just launch it. # differentiate between windows and other os's. if not db_entry['command_string'] == 'backplane': if sys.platform.startswith('win32'): if db_entry['spawn'] == 'yes': self.proc = Popen(db_entry['command_string'], creationflags=subprocess.CREATE_NEW_CONSOLE) else: command_list = db_entry['command_string'] self.proc = Popen(command_list, creationflags=subprocess.CREATE_NEW_PROCESS_GROUP) else: if db_entry['spawn'] == 'yes': self.proc = Popen(['xterm', '-e', db_entry['command_string']], stdin=subprocess.PIPE, stderr=subprocess.PIPE, stdout=subprocess.PIPE) else: command_list = db_entry['command_string'].split(' ') self.proc = Popen(command_list) # update the entry with the launch information db_entry['process'] = self.proc db_entry['process_id'] = self.proc.pid print('{:35} PID = {}'.format(db_entry['command_string'], str(self.proc.pid))) # allow a little time for the process to startup try: time.sleep(0.5) except (KeyboardInterrupt, SystemExit): self.clean_up()
Example #21
Source File: snowflake.py From QCFractal with BSD 3-Clause "New" or "Revised" License | 5 votes |
def _background_process(args, **kwargs): if sys.platform.startswith("win"): # Allow using CTRL_C_EVENT / CTRL_BREAK_EVENT kwargs["creationflags"] = subprocess.CREATE_NEW_PROCESS_GROUP kwargs["stdout"] = subprocess.PIPE kwargs["stderr"] = subprocess.PIPE proc = subprocess.Popen(args, **kwargs) return proc
Example #22
Source File: test_os.py From Fluid-Designer with GNU General Public License v3.0 | 5 votes |
def _kill_with_event(self, event, name): tagname = "test_os_%s" % uuid.uuid1() m = mmap.mmap(-1, 1, tagname) m[0] = 0 # Run a script which has console control handling enabled. proc = subprocess.Popen([sys.executable, os.path.join(os.path.dirname(__file__), "win_console_handler.py"), tagname], creationflags=subprocess.CREATE_NEW_PROCESS_GROUP) # Let the interpreter startup before we send signals. See #3137. count, max = 0, 100 while count < max and proc.poll() is None: if m[0] == 1: break time.sleep(0.1) count += 1 else: # Forcefully kill the process if we weren't able to signal it. os.kill(proc.pid, signal.SIGINT) self.fail("Subprocess didn't finish initialization") os.kill(proc.pid, event) # proc.send_signal(event) could also be done here. # Allow time for the signal to be passed and the process to exit. time.sleep(0.5) if not proc.poll(): # Forcefully kill the process if we weren't able to signal it. os.kill(proc.pid, signal.SIGINT) self.fail("subprocess did not stop on {}".format(name))
Example #23
Source File: JobRunner.py From civet with Apache License 2.0 | 5 votes |
def create_process(self, script_name, env, devnull): """ Creates a subprocess to run the script Input: script_name: str: Name of the temporary file of the script to run env: dict: Holds the environment devnull: file object that will be used as stdin Return: subprocess.Popen that was created """ if self.is_windows(): exec_cmd = os.path.join(os.path.dirname(__file__), "scripts", "mingw64_runcmd.bat") return subprocess.Popen( [exec_cmd, script_name], env=env, shell=False, stdin=devnull, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, creationflags=subprocess.CREATE_NEW_PROCESS_GROUP, ) else: return subprocess.Popen( ['/bin/bash', script_name], shell=False, cwd="/", env=env, stdin=devnull, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, preexec_fn=os.setsid, )
Example #24
Source File: popen_spawn.py From pipenv with MIT License | 5 votes |
def __init__(self, cmd, timeout=30, maxread=2000, searchwindowsize=None, logfile=None, cwd=None, env=None, encoding=None, codec_errors='strict', preexec_fn=None): super(PopenSpawn, self).__init__(timeout=timeout, maxread=maxread, searchwindowsize=searchwindowsize, logfile=logfile, encoding=encoding, codec_errors=codec_errors) # Note that `SpawnBase` initializes `self.crlf` to `\r\n` # because the default behaviour for a PTY is to convert # incoming LF to `\r\n` (see the `onlcr` flag and # https://stackoverflow.com/a/35887657/5397009). Here we set # it to `os.linesep` because that is what the spawned # application outputs by default and `popen` doesn't translate # anything. if encoding is None: self.crlf = os.linesep.encode ("ascii") else: self.crlf = self.string_type (os.linesep) kwargs = dict(bufsize=0, stdin=subprocess.PIPE, stderr=subprocess.STDOUT, stdout=subprocess.PIPE, cwd=cwd, preexec_fn=preexec_fn, env=env) if sys.platform == 'win32': startupinfo = subprocess.STARTUPINFO() startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW kwargs['startupinfo'] = startupinfo kwargs['creationflags'] = subprocess.CREATE_NEW_PROCESS_GROUP if isinstance(cmd, string_types) and sys.platform != 'win32': cmd = shlex.split(cmd, posix=os.name == 'posix') self.proc = subprocess.Popen(cmd, **kwargs) self.pid = self.proc.pid self.closed = False self._buf = self.string_type() self._read_queue = Queue() self._read_thread = threading.Thread(target=self._read_incoming) self._read_thread.setDaemon(True) self._read_thread.start()
Example #25
Source File: test_os.py From oss-ftp with MIT License | 5 votes |
def _kill_with_event(self, event, name): tagname = "test_os_%s" % uuid.uuid1() m = mmap.mmap(-1, 1, tagname) m[0] = '0' # Run a script which has console control handling enabled. proc = subprocess.Popen([sys.executable, os.path.join(os.path.dirname(__file__), "win_console_handler.py"), tagname], creationflags=subprocess.CREATE_NEW_PROCESS_GROUP) # Let the interpreter startup before we send signals. See #3137. count, max = 0, 20 while count < max and proc.poll() is None: if m[0] == '1': break time.sleep(0.5) count += 1 else: self.fail("Subprocess didn't finish initialization") os.kill(proc.pid, event) # proc.send_signal(event) could also be done here. # Allow time for the signal to be passed and the process to exit. time.sleep(0.5) if not proc.poll(): # Forcefully kill the process if we weren't able to signal it. os.kill(proc.pid, signal.SIGINT) self.fail("subprocess did not stop on {}".format(name))
Example #26
Source File: test_os.py From BinderFilter with MIT License | 5 votes |
def _kill_with_event(self, event, name): tagname = "test_os_%s" % uuid.uuid1() m = mmap.mmap(-1, 1, tagname) m[0] = '0' # Run a script which has console control handling enabled. proc = subprocess.Popen([sys.executable, os.path.join(os.path.dirname(__file__), "win_console_handler.py"), tagname], creationflags=subprocess.CREATE_NEW_PROCESS_GROUP) # Let the interpreter startup before we send signals. See #3137. count, max = 0, 20 while count < max and proc.poll() is None: if m[0] == '1': break time.sleep(0.5) count += 1 else: self.fail("Subprocess didn't finish initialization") os.kill(proc.pid, event) # proc.send_signal(event) could also be done here. # Allow time for the signal to be passed and the process to exit. time.sleep(0.5) if not proc.poll(): # Forcefully kill the process if we weren't able to signal it. os.kill(proc.pid, signal.SIGINT) self.fail("subprocess did not stop on {}".format(name))
Example #27
Source File: test_os.py From ironpython2 with Apache License 2.0 | 5 votes |
def _kill_with_event(self, event, name): tagname = "test_os_%s" % uuid.uuid1() m = mmap.mmap(-1, 1, tagname) m[0] = '0' # Run a script which has console control handling enabled. proc = subprocess.Popen([sys.executable, os.path.join(os.path.dirname(__file__), "win_console_handler.py"), tagname], creationflags=subprocess.CREATE_NEW_PROCESS_GROUP) # Let the interpreter startup before we send signals. See #3137. count, max = 0, 20 while count < max and proc.poll() is None: if m[0] == '1': break time.sleep(0.5) count += 1 else: self.fail("Subprocess didn't finish initialization") os.kill(proc.pid, event) # proc.send_signal(event) could also be done here. # Allow time for the signal to be passed and the process to exit. time.sleep(0.5) if not proc.poll(): # Forcefully kill the process if we weren't able to signal it. os.kill(proc.pid, signal.SIGINT) self.fail("subprocess did not stop on {}".format(name))
Example #28
Source File: test_os.py From CTFCrackTools with GNU General Public License v3.0 | 5 votes |
def _kill_with_event(self, event, name): tagname = "test_os_%s" % uuid.uuid1() m = mmap.mmap(-1, 1, tagname) m[0] = '0' # Run a script which has console control handling enabled. proc = subprocess.Popen([sys.executable, os.path.join(os.path.dirname(__file__), "win_console_handler.py"), tagname], creationflags=subprocess.CREATE_NEW_PROCESS_GROUP) # Let the interpreter startup before we send signals. See #3137. count, max = 0, 20 while count < max and proc.poll() is None: if m[0] == '1': break time.sleep(0.5) count += 1 else: self.fail("Subprocess didn't finish initialization") os.kill(proc.pid, event) # proc.send_signal(event) could also be done here. # Allow time for the signal to be passed and the process to exit. time.sleep(0.5) if not proc.poll(): # Forcefully kill the process if we weren't able to signal it. os.kill(proc.pid, signal.SIGINT) self.fail("subprocess did not stop on {}".format(name))
Example #29
Source File: ssh_tunnel.py From integrations-core with BSD 3-Clause "New" or "Revised" License | 5 votes |
def run_background_command(command, pid_filename, env=None): """Run `command` in the background, writing its PID in `pid_filename`.""" if ON_WINDOWS: process = subprocess.Popen(command, env=env, creationflags=subprocess.CREATE_NEW_PROCESS_GROUP) else: process = subprocess.Popen(command, env=env, start_new_session=True) with open(pid_filename, 'w') as pid_file: pid_file.write(str(process.pid))
Example #30
Source File: conftest.py From nbgrader with BSD 3-Clause "New" or "Revised" License | 4 votes |
def _make_nbserver(course_id, port, tempdir, jupyter_config_dir, jupyter_data_dir, exchange, cache, startup_fn=None): env = os.environ.copy() env['JUPYTER_CONFIG_DIR'] = jupyter_config_dir env['JUPYTER_DATA_DIR'] = jupyter_data_dir env['HOME'] = tempdir sp.check_call([sys.executable, "-m", "jupyter", "nbextension", "install", "--user", "--py", "nbgrader"], env=env) sp.check_call([sys.executable, "-m", "jupyter", "nbextension", "enable", "--user", "--py", "nbgrader"], env=env) sp.check_call([sys.executable, "-m", "jupyter", "serverextension", "enable", "--user", "--py", "nbgrader"], env=env) # create nbgrader_config.py file with open('nbgrader_config.py', 'w') as fh: fh.write(dedent( """ c = get_config() c.Execute.execute_retries = 4 """ )) if sys.platform != 'win32': fh.write(dedent( """ c.Exchange.root = "{}" c.Exchange.cache = "{}" c.CourseDirectory.course_id = "{}" """.format(exchange, cache, course_id) )) run_nbgrader(["db", "assignment", "add", "Problem Set 1"]) run_nbgrader(["db", "assignment", "add", "ps.01"]) run_nbgrader(["db", "student", "add", "Bitdiddle", "--first-name", "Ben", "--last-name", "B"]) run_nbgrader(["db", "student", "add", "Hacker", "--first-name", "Alyssa", "--last-name", "H"]) run_nbgrader(["db", "student", "add", "Reasoner", "--first-name", "Louis", "--last-name", "R"]) if startup_fn: startup_fn(env) kwargs = dict(env=env) if sys.platform == 'win32': kwargs['creationflags'] = sp.CREATE_NEW_PROCESS_GROUP server = sp.Popen([ sys.executable, "-m", "jupyter", "notebook", "--no-browser", "--NotebookApp.token=''", # Notebook >=4.3 "--port", str(port), "--log-level=DEBUG"], **kwargs) # wait for a few seconds to allow the notebook server to finish starting time.sleep(5) return server