Python os.set_inheritable() Examples
The following are 30
code examples of os.set_inheritable().
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
os
, or try the search function
.
Example #1
Source File: test_subprocess.py From ironpython3 with Apache License 2.0 | 6 votes |
def test_pass_fds_inheritable(self): script = support.findfile("fd_status.py", subdir="subprocessdata") inheritable, non_inheritable = os.pipe() self.addCleanup(os.close, inheritable) self.addCleanup(os.close, non_inheritable) os.set_inheritable(inheritable, True) os.set_inheritable(non_inheritable, False) pass_fds = (inheritable, non_inheritable) args = [sys.executable, script] args += list(map(str, pass_fds)) p = subprocess.Popen(args, stdout=subprocess.PIPE, close_fds=True, pass_fds=pass_fds) output, ignored = p.communicate() fds = set(map(int, output.split(b','))) # the inheritable file descriptor must be inherited, so its inheritable # flag must be set in the child process after fork() and before exec() self.assertEqual(fds, set(pass_fds), "output=%a" % output) # inheritable flag must not be changed in the parent process self.assertEqual(os.get_inheritable(inheritable), True) self.assertEqual(os.get_inheritable(non_inheritable), False)
Example #2
Source File: ipc.py From hupper with MIT License | 6 votes |
def spawn(spec, kwargs, pass_fds=()): """ Invoke a python function in a subprocess. """ r, w = os.pipe() for fd in [r] + list(pass_fds): set_inheritable(fd, True) preparation_data = get_preparation_data() r_handle = get_handle(r) args, env = get_command_line(pipe_handle=r_handle) process = subprocess.Popen(args, env=env, close_fds=False) to_child = os.fdopen(w, 'wb') to_child.write(pickle.dumps([preparation_data, spec, kwargs])) to_child.close() return process
Example #3
Source File: ipc.py From hupper with MIT License | 6 votes |
def set_inheritable(fd, inheritable): # On py34+ we can use os.set_inheritable but < py34 we must polyfill # with fcntl and SetHandleInformation if hasattr(os, 'get_inheritable'): if os.get_inheritable(fd) != inheritable: os.set_inheritable(fd, inheritable) elif WIN: h = get_handle(fd) flags = winapi.HANDLE_FLAG_INHERIT if inheritable else 0 winapi.SetHandleInformation(h, winapi.HANDLE_FLAG_INHERIT, flags) else: flags = fcntl.fcntl(fd, fcntl.F_GETFD) if inheritable: new_flags = flags & ~fcntl.FD_CLOEXEC else: new_flags = flags | fcntl.FD_CLOEXEC if new_flags != flags: fcntl.fcntl(fd, fcntl.F_SETFD, new_flags)
Example #4
Source File: test_subprocess.py From Project-New-Reign---Nemesis-Main with GNU General Public License v3.0 | 6 votes |
def test_pass_fds_inheritable(self): script = support.findfile("fd_status.py", subdir="subprocessdata") inheritable, non_inheritable = os.pipe() self.addCleanup(os.close, inheritable) self.addCleanup(os.close, non_inheritable) os.set_inheritable(inheritable, True) os.set_inheritable(non_inheritable, False) pass_fds = (inheritable, non_inheritable) args = [sys.executable, script] args += list(map(str, pass_fds)) p = subprocess.Popen(args, stdout=subprocess.PIPE, close_fds=True, pass_fds=pass_fds) output, ignored = p.communicate() fds = set(map(int, output.split(b','))) # the inheritable file descriptor must be inherited, so its inheritable # flag must be set in the child process after fork() and before exec() self.assertEqual(fds, set(pass_fds), "output=%a" % output) # inheritable flag must not be changed in the parent process self.assertEqual(os.get_inheritable(inheritable), True) self.assertEqual(os.get_inheritable(non_inheritable), False)
Example #5
Source File: _socket3.py From PokemonGo-DesktopMap with MIT License | 6 votes |
def sendfile(self, file, offset=0, count=None): """sendfile(file[, offset[, count]]) -> sent Send a file until EOF is reached by using high-performance os.sendfile() and return the total number of bytes which were sent. *file* must be a regular file object opened in binary mode. If os.sendfile() is not available (e.g. Windows) or file is not a regular file socket.send() will be used instead. *offset* tells from where to start reading the file. If specified, *count* is the total number of bytes to transmit as opposed to sending the file until EOF is reached. File position is updated on return or also in case of error in which case file.tell() can be used to figure out the number of bytes which were sent. The socket must be of SOCK_STREAM type. Non-blocking sockets are not supported. .. versionadded:: 1.1rc4 Added in Python 3.5, but available under all Python 3 versions in gevent. """ return self._sendfile_use_send(file, offset, count) # get/set_inheritable new in 3.4
Example #6
Source File: test_subprocess.py From Fluid-Designer with GNU General Public License v3.0 | 6 votes |
def test_pass_fds_inheritable(self): script = support.findfile("fd_status.py", subdir="subprocessdata") inheritable, non_inheritable = os.pipe() self.addCleanup(os.close, inheritable) self.addCleanup(os.close, non_inheritable) os.set_inheritable(inheritable, True) os.set_inheritable(non_inheritable, False) pass_fds = (inheritable, non_inheritable) args = [sys.executable, script] args += list(map(str, pass_fds)) p = subprocess.Popen(args, stdout=subprocess.PIPE, close_fds=True, pass_fds=pass_fds) output, ignored = p.communicate() fds = set(map(int, output.split(b','))) # the inheritable file descriptor must be inherited, so its inheritable # flag must be set in the child process after fork() and before exec() self.assertEqual(fds, set(pass_fds), "output=%a" % output) # inheritable flag must not be changed in the parent process self.assertEqual(os.get_inheritable(inheritable), True) self.assertEqual(os.get_inheritable(non_inheritable), False)
Example #7
Source File: dispatch.py From accelerator with Apache License 2.0 | 6 votes |
def run(cmd, close_in_child, keep_in_child, with_pgrp=True): child = os.fork() if child: return child if with_pgrp: os.setpgrp() # this pgrp is killed if the job fails for fd in close_in_child: os.close(fd) keep_in_child = set(keep_in_child) keep_in_child.add(int(os.getenv('BD_STATUS_FD'))) keep_in_child.add(int(os.getenv('BD_TERM_FD'))) close_fds(keep_in_child) # unreadable stdin - less risk of stuck jobs devnull = os.open('/dev/null', os.O_RDONLY) os.dup2(devnull, 0) os.close(devnull) if PY3: keep_in_child.update([1, 2]) for fd in keep_in_child: os.set_inheritable(fd, True) os.execv(cmd[0], cmd) os._exit()
Example #8
Source File: _socket3.py From PokemonGo-DesktopMap with MIT License | 6 votes |
def sendfile(self, file, offset=0, count=None): """sendfile(file[, offset[, count]]) -> sent Send a file until EOF is reached by using high-performance os.sendfile() and return the total number of bytes which were sent. *file* must be a regular file object opened in binary mode. If os.sendfile() is not available (e.g. Windows) or file is not a regular file socket.send() will be used instead. *offset* tells from where to start reading the file. If specified, *count* is the total number of bytes to transmit as opposed to sending the file until EOF is reached. File position is updated on return or also in case of error in which case file.tell() can be used to figure out the number of bytes which were sent. The socket must be of SOCK_STREAM type. Non-blocking sockets are not supported. .. versionadded:: 1.1rc4 Added in Python 3.5, but available under all Python 3 versions in gevent. """ return self._sendfile_use_send(file, offset, count) # get/set_inheritable new in 3.4
Example #9
Source File: _socket3.py From satori with Apache License 2.0 | 6 votes |
def sendfile(self, file, offset=0, count=None): """sendfile(file[, offset[, count]]) -> sent Send a file until EOF is reached by using high-performance os.sendfile() and return the total number of bytes which were sent. *file* must be a regular file object opened in binary mode. If os.sendfile() is not available (e.g. Windows) or file is not a regular file socket.send() will be used instead. *offset* tells from where to start reading the file. If specified, *count* is the total number of bytes to transmit as opposed to sending the file until EOF is reached. File position is updated on return or also in case of error in which case file.tell() can be used to figure out the number of bytes which were sent. The socket must be of SOCK_STREAM type. Non-blocking sockets are not supported. .. versionadded:: 1.1rc4 Added in Python 3.5, but available under all Python 3 versions in gevent. """ return self._sendfile_use_send(file, offset, count) # get/set_inheritable new in 3.4
Example #10
Source File: _socket3.py From PhonePi_SampleServer with MIT License | 6 votes |
def sendfile(self, file, offset=0, count=None): """sendfile(file[, offset[, count]]) -> sent Send a file until EOF is reached by using high-performance os.sendfile() and return the total number of bytes which were sent. *file* must be a regular file object opened in binary mode. If os.sendfile() is not available (e.g. Windows) or file is not a regular file socket.send() will be used instead. *offset* tells from where to start reading the file. If specified, *count* is the total number of bytes to transmit as opposed to sending the file until EOF is reached. File position is updated on return or also in case of error in which case file.tell() can be used to figure out the number of bytes which were sent. The socket must be of SOCK_STREAM type. Non-blocking sockets are not supported. .. versionadded:: 1.1rc4 Added in Python 3.5, but available under all Python 3 versions in gevent. """ return self._sendfile_use_send(file, offset, count) # get/set_inheritable new in 3.4
Example #11
Source File: subprocess.py From PhonePi_SampleServer with MIT License | 5 votes |
def _close_fds(self, keep): # `keep` is a set of fds, so we # use os.closerange from 3 to min(keep) # and then from max(keep + 1) to MAXFD and # loop through filling in the gaps. # Under new python versions, we need to explicitly set # passed fds to be inheritable or they will go away on exec if hasattr(os, 'set_inheritable'): set_inheritable = os.set_inheritable else: set_inheritable = lambda i, v: True if hasattr(os, 'closerange'): keep = sorted(keep) min_keep = min(keep) max_keep = max(keep) os.closerange(3, min_keep) os.closerange(max_keep + 1, MAXFD) for i in xrange(min_keep, max_keep): if i in keep: set_inheritable(i, True) continue try: os.close(i) except: pass else: for i in xrange(3, MAXFD): if i in keep: set_inheritable(i, True) continue try: os.close(i) except: pass
Example #12
Source File: test_os.py From Project-New-Reign---Nemesis-Main with GNU General Public License v3.0 | 5 votes |
def test_set_inheritable_cloexec(self): fd = os.open(__file__, os.O_RDONLY) self.addCleanup(os.close, fd) self.assertEqual(fcntl.fcntl(fd, fcntl.F_GETFD) & fcntl.FD_CLOEXEC, fcntl.FD_CLOEXEC) os.set_inheritable(fd, True) self.assertEqual(fcntl.fcntl(fd, fcntl.F_GETFD) & fcntl.FD_CLOEXEC, 0)
Example #13
Source File: _socket3.py From PhonePi_SampleServer with MIT License | 5 votes |
def set_inheritable(self, inheritable): os.set_inheritable(self.fileno(), inheritable)
Example #14
Source File: socket.py From Project-New-Reign---Nemesis-Main with GNU General Public License v3.0 | 5 votes |
def set_inheritable(self, inheritable): os.set_handle_inheritable(self.fileno(), inheritable)
Example #15
Source File: socket.py From Project-New-Reign---Nemesis-Main with GNU General Public License v3.0 | 5 votes |
def set_inheritable(self, inheritable): os.set_inheritable(self.fileno(), inheritable)
Example #16
Source File: test_subprocess.py From Project-New-Reign---Nemesis-Main with GNU General Public License v3.0 | 5 votes |
def test_pass_fds(self): fd_status = support.findfile("fd_status.py", subdir="subprocessdata") open_fds = set() for x in range(5): fds = os.pipe() self.addCleanup(os.close, fds[0]) self.addCleanup(os.close, fds[1]) os.set_inheritable(fds[0], True) os.set_inheritable(fds[1], True) open_fds.update(fds) for fd in open_fds: p = subprocess.Popen([sys.executable, fd_status], stdout=subprocess.PIPE, close_fds=True, pass_fds=(fd, )) output, ignored = p.communicate() remaining_fds = set(map(int, output.split(b','))) to_be_closed = open_fds - {fd} self.assertIn(fd, remaining_fds, "fd to be passed not passed") self.assertFalse(remaining_fds & to_be_closed, "fd to be closed passed") # pass_fds overrides close_fds with a warning. with self.assertWarns(RuntimeWarning) as context: self.assertFalse(subprocess.call( [sys.executable, "-c", "import sys; sys.exit(0)"], close_fds=False, pass_fds=(fd, ))) self.assertIn('overriding close_fds', str(context.warning))
Example #17
Source File: _socket3.py From PhonePi_SampleServer with MIT License | 5 votes |
def set_inheritable(self, inheritable): os.set_handle_inheritable(self.fileno(), inheritable)
Example #18
Source File: test_os.py From Project-New-Reign---Nemesis-Main with GNU General Public License v3.0 | 5 votes |
def test_get_set_inheritable(self): fd = os.open(__file__, os.O_RDONLY) self.addCleanup(os.close, fd) self.assertEqual(os.get_inheritable(fd), False) os.set_inheritable(fd, True) self.assertEqual(os.get_inheritable(fd), True)
Example #19
Source File: socket.py From PySocket with Apache License 2.0 | 5 votes |
def set_inheritable(self, inheritable): os.set_handle_inheritable(self.fileno(), inheritable)
Example #20
Source File: context.py From furnace with GNU Lesser General Public License v2.1 | 5 votes |
def start(self): pipe_parent_read, pipe_child_write = os.pipe() pipe_child_read, pipe_parent_write = os.pipe() os.set_inheritable(pipe_child_read, True) os.set_inheritable(pipe_child_write, True) # We unshare (change) the pid namespace here, and other namespaces after # the exec, because if we exec'd in the new mount namespace, it would open # files in the new namespace's root, and prevent us from umounting the old # root after pivot_root. Note that changing the pid namespace affects only # the children (namely, which namespace they will be put in). It is thread # safe because unshare() affects the calling thread only. unshare(CLONE_NEWPID) self.pid = os.fork() if not self.pid: # this is the child process, will turn into PID1 in the container try: # this method will NOT return self.do_exec(pipe_child_read, pipe_child_write) except BaseException as e: # We are the child process, do NOT run parent's __exit__ handlers print(e, file=sys.stderr) os._exit(1) logger.debug("Container PID1 actual PID: {}".format(self.pid)) # Reset the pid namespace of the parent process. /proc/self/ns/pid contains # a reference to the original pid namespace of the thread. New child processes # will be placed in this pid namespace after the setns() has restored the original # pid namespace original_pidns_fd = os.open('/proc/self/ns/pid', os.O_RDONLY) setns(original_pidns_fd, CLONE_NEWPID) os.close(original_pidns_fd) os.close(pipe_child_read) os.close(pipe_child_write) self.control_read = pipe_parent_read self.control_write = pipe_parent_write self.wait_for_ready_signal()
Example #21
Source File: capture_subprocess.py From venv-update with MIT License | 5 votes |
def set_inheritable(*_): pass
Example #22
Source File: capture_subprocess.py From venv-update with MIT License | 5 votes |
def __init__(self): self.read, self.write = os.pipe() # emulate old, inheritable os.pipe in py34 set_inheritable(self.read, True) set_inheritable(self.write, True)
Example #23
Source File: _socket3.py From PokemonGo-DesktopMap with MIT License | 5 votes |
def set_inheritable(self, inheritable): os.set_handle_inheritable(self.fileno(), inheritable)
Example #24
Source File: _socket3.py From PokemonGo-DesktopMap with MIT License | 5 votes |
def set_inheritable(self, inheritable): os.set_inheritable(self.fileno(), inheritable)
Example #25
Source File: subprocess.py From PokemonGo-DesktopMap with MIT License | 5 votes |
def _close_fds(self, keep): # `keep` is a set of fds, so we # use os.closerange from 3 to min(keep) # and then from max(keep + 1) to MAXFD and # loop through filling in the gaps. # Under new python versions, we need to explicitly set # passed fds to be inheritable or they will go away on exec if hasattr(os, 'set_inheritable'): set_inheritable = os.set_inheritable else: set_inheritable = lambda i, v: True if hasattr(os, 'closerange'): keep = sorted(keep) min_keep = min(keep) max_keep = max(keep) os.closerange(3, min_keep) os.closerange(max_keep + 1, MAXFD) for i in xrange(min_keep, max_keep): if i in keep: set_inheritable(i, True) continue try: os.close(i) except: pass else: for i in xrange(3, MAXFD): if i in keep: set_inheritable(i, True) continue try: os.close(i) except: pass
Example #26
Source File: _socket3.py From PokemonGo-DesktopMap with MIT License | 5 votes |
def set_inheritable(self, inheritable): os.set_inheritable(self.fileno(), inheritable)
Example #27
Source File: subprocess.py From PokemonGo-DesktopMap with MIT License | 5 votes |
def _close_fds(self, keep): # `keep` is a set of fds, so we # use os.closerange from 3 to min(keep) # and then from max(keep + 1) to MAXFD and # loop through filling in the gaps. # Under new python versions, we need to explicitly set # passed fds to be inheritable or they will go away on exec if hasattr(os, 'set_inheritable'): set_inheritable = os.set_inheritable else: set_inheritable = lambda i, v: True if hasattr(os, 'closerange'): keep = sorted(keep) min_keep = min(keep) max_keep = max(keep) os.closerange(3, min_keep) os.closerange(max_keep + 1, MAXFD) for i in xrange(min_keep, max_keep): if i in keep: set_inheritable(i, True) continue try: os.close(i) except: pass else: for i in xrange(3, MAXFD): if i in keep: set_inheritable(i, True) continue try: os.close(i) except: pass
Example #28
Source File: socket.py From android_universal with MIT License | 5 votes |
def set_inheritable(self, inheritable): os.set_handle_inheritable(self.fileno(), inheritable)
Example #29
Source File: socket.py From android_universal with MIT License | 5 votes |
def set_inheritable(self, inheritable): os.set_inheritable(self.fileno(), inheritable)
Example #30
Source File: socket.py From Imogen with MIT License | 5 votes |
def set_inheritable(self, inheritable): os.set_inheritable(self.fileno(), inheritable)