我们从Python开源项目中,提取了以下49个代码示例,用于说明如何使用os.ttyname()。
def tty_create_child(*args): master_fd, slave_fd = os.openpty() disable_echo(master_fd) disable_echo(slave_fd) pid = os.fork() if not pid: mitogen.core.set_block(slave_fd) os.dup2(slave_fd, 0) os.dup2(slave_fd, 1) os.dup2(slave_fd, 2) close_nonstandard_fds() os.setsid() os.close(os.open(os.ttyname(1), os.O_RDWR)) os.execvp(args[0], args) os.close(slave_fd) LOG.debug('tty_create_child() child %d fd %d, parent %d, cmd: %s', pid, master_fd, os.getpid(), Argv(args)) return pid, master_fd
def __init__(self): gr.sync_block.__init__(self, name="hdlc_to_ax25", in_sig=None, out_sig=None) (self.pty_master, self.pty_slave) = pty.openpty() tty = os.ttyname(self.pty_slave) if os.path.islink('/tmp/kiss_pty'): os.unlink('/tmp/kiss_pty') os.symlink(tty, '/tmp/kiss_pty') print 'KISS PTY is: /tmp/kiss_pty (%s)' % os.ttyname(self.pty_slave) self.message_port_register_in(pmt.intern('in')) self.set_msg_handler(pmt.intern('in'), self.handle_msg) self.count = 0 self.dropped = 0
def __init__(self, args, *, size=core.STANDARD_SIZE, cmd=None, env=None, callbacks_cls=PtyCallbacks, __os_close=os.close, **kwargs): self._master_fd = -1 super().__init__(size) master_fd, slave_fd = os.openpty() try: self._slave_name = os.ttyname(slave_fd) _spawn(cmd, args, env, fds={0: slave_fd, 1: slave_fd, 2: slave_fd}, tty=slave_fd) self._master_fd = master_fd master_fd = -1 finally: __os_close(slave_fd) if master_fd != -1: __os_close(master_fd) # configure some sensible defaults callbacks = callbacks_cls(self, **kwargs) self.set_callbacks(callbacks) self.callbacks = callbacks
def __init__(self, message_q): QThread.__init__(self) self.messages = message_q # Only the inferior process need use the slave file descriptor self.master, self.slave = pty.openpty() self.tty = os.ttyname(self.slave)
def getPty(self, term, windowSize, modes): self.environ['TERM'] = term self.winSize = windowSize self.modes = modes master, slave = pty.openpty() ttyname = os.ttyname(slave) self.environ['SSH_TTY'] = ttyname self.ptyTuple = (master, slave, ttyname)
def master_open(): """master_open() -> (master_fd, slave_name) Open a pty master and return the fd, and the filename of the slave end. Deprecated, use openpty() instead.""" try: master_fd, slave_fd = os.openpty() except (AttributeError, OSError): pass else: slave_name = os.ttyname(slave_fd) os.close(slave_fd) return master_fd, slave_name return _open_terminal()
def fork(): """fork() -> (pid, master_fd) Fork and make the child a session leader with a controlling terminal.""" try: pid, fd = os.forkpty() except (AttributeError, OSError): pass else: if pid == CHILD: try: os.setsid() except OSError: # os.forkpty() already set us session leader pass return pid, fd master_fd, slave_fd = openpty() pid = os.fork() if pid == CHILD: # Establish a new session. os.setsid() os.close(master_fd) # Slave becomes stdin/stdout/stderr of child. os.dup2(slave_fd, STDIN_FILENO) os.dup2(slave_fd, STDOUT_FILENO) os.dup2(slave_fd, STDERR_FILENO) if (slave_fd > STDERR_FILENO): os.close (slave_fd) # Explicitly open the tty to make it become a controlling tty. tmp_fd = os.open(os.ttyname(STDOUT_FILENO), os.O_RDWR) os.close(tmp_fd) else: os.close(slave_fd) # Parent and child process. return pid, master_fd
def __init__(self): self._master, self._slave = pty.openpty() self._s_name = os.ttyname(self._slave) self._fake = Faker() self._fake_device = threading.Thread(target=self.__run)
def getRealUser(self): ttyname = os.ttyname(sys.stdout.fileno()) for entry in self.readUtmp(): if entry[4] == "": continue if ttyname.endswith(entry[2]): return entry[4]
def pty_make_controlling_tty(tty_fd): '''This makes the pseudo-terminal the controlling tty. This should be more portable than the pty.fork() function. Specifically, this should work on Solaris. ''' child_name = os.ttyname(tty_fd) # Disconnect from controlling tty, if any. Raises OSError of ENXIO # if there was no controlling tty to begin with, such as when # executed by a cron(1) job. try: fd = os.open("/dev/tty", os.O_RDWR | os.O_NOCTTY) os.close(fd) except OSError as err: if err.errno != errno.ENXIO: raise os.setsid() # Verify we are disconnected from controlling tty by attempting to open # it again. We expect that OSError of ENXIO should always be raised. try: fd = os.open("/dev/tty", os.O_RDWR | os.O_NOCTTY) os.close(fd) raise ExceptionPexpect("OSError of errno.ENXIO should be raised.") except OSError as err: if err.errno != errno.ENXIO: raise # Verify we can open child pty. fd = os.open(child_name, os.O_RDWR) os.close(fd) # Verify we now have a controlling tty. fd = os.open("/dev/tty", os.O_WRONLY) os.close(fd)
def __pty_make_controlling_tty(self, tty_fd): """This makes the pseudo-terminal the controlling tty. This should be more portable than the pty.fork() function. Specifically, this should work on Solaris. """ child_name = os.ttyname(tty_fd) # Disconnect from controlling tty if still connected. fd = os.open("/dev/tty", os.O_RDWR | os.O_NOCTTY); if fd >= 0: os.close(fd) os.setsid() # Verify we are disconnected from controlling tty try: fd = os.open("/dev/tty", os.O_RDWR | os.O_NOCTTY); if fd >= 0: os.close(fd) raise ExceptionPexpect, "Error! We are not disconnected from a controlling tty." except: # Good! We are disconnected from a controlling tty. pass # Verify we can open child pty. fd = os.open(child_name, os.O_RDWR); if fd < 0: raise ExceptionPexpect, "Error! Could not open child pty, " + child_name else: os.close(fd) # Verify we now have a controlling tty. fd = os.open("/dev/tty", os.O_WRONLY) if fd < 0: raise ExceptionPexpect, "Error! Could not open controlling tty, /dev/tty" else: os.close(fd)
def __init__(self, name): """If possible, connect to serial port""" # Try to establish connection to serial port try: self.serial_connection = serial.Serial(name, 9600) self.serial_connection_established = True # If it fails because there is no device, use virtual serial port except serial.SerialException: # Create virtual serial port self.master, self.slave = pty.openpty() self.vPort = os.ttyname(self.slave) # Create instance self.serial_connection = serial.Serial(self.vPort, 9600) self.serial_connection_established = True logging.warn("Trigger device not found -> Using virtual device") # Create events self.trigger_event = threading.Event() self.eventProgramEnd = threading.Event() # Store current time self.last_trigger_time = time.time() self.firstRun = True # Call initialization of thread class threading.Thread.__init__(self)
def daemonize(): """ This function will daemonize the script and continue executing it only when the current session will have ended. The rationale behind this is to clean logs after the caller has disconnected from the machine in order to catch SSH logout records (for instance). :return: """ def fork(): try: pid = os.fork() if pid > 0: # Exit parent sys.exit(0) except OSError: _, e = sys.exc_info()[:2] print "Error while forking! (%s)" % e.message sys.exit(1) # Double fork to daemonize fork() os.chdir('/') os.setsid() os.umask(0) fork() print success("The script has daemonized successfully. Logs will be cleaned when this " "session ends.") # Dirty trick to figure out when the user has disconnected from the current session: # try to use the file descriptor for stdout and detect when it is closed. while True: time.sleep(10) try: os.ttyname(1) except: # Exception caught: stdout doesn't exist anymore. return # This means the session has ended and we can proceed. # -----------------------------------------------------------------------------
def __pty_make_controlling_tty(self, tty_fd): '''This makes the pseudo-terminal the controlling tty. This should be more portable than the pty.fork() function. Specifically, this should work on Solaris. ''' child_name = os.ttyname(tty_fd) # Disconnect from controlling tty, if any. Raises OSError of ENXIO # if there was no controlling tty to begin with, such as when # executed by a cron(1) job. try: fd = os.open("/dev/tty", os.O_RDWR | os.O_NOCTTY) os.close(fd) except OSError as err: if err.errno != errno.ENXIO: raise os.setsid() # Verify we are disconnected from controlling tty by attempting to open # it again. We expect that OSError of ENXIO should always be raised. try: fd = os.open("/dev/tty", os.O_RDWR | os.O_NOCTTY) os.close(fd) raise ExceptionPexpect("OSError of errno.ENXIO should be raised.") except OSError as err: if err.errno != errno.ENXIO: raise # Verify we can open child pty. fd = os.open(child_name, os.O_RDWR) os.close(fd) # Verify we now have a controlling tty. fd = os.open("/dev/tty", os.O_WRONLY) os.close(fd)
def __init__(self, hci_device_number=0, logger=None, events_config=None): self._logger = logger or logging.getLogger(__name__) self._event_parser = EventParser(config=events_config, logger=self._logger) self._agent_events_sender = AgentEventsSender(logger=self._logger) self._hci_device_number = hci_device_number try: subprocess.check_call(['hciconfig', self.hci_device_name, 'down']) except subprocess.CalledProcessError: self._logger.error('Could not run hciconfig down command for HCI device') raise self._hci_socket = create_bt_socket_hci_channel_user(hci_device_number) self._logger.info('bind to %s complete', self.hci_device_name) self._pty_master, pty_slave = pty.openpty() self._pty_fd = os.fdopen(self._pty_master, 'rwb') hci_tty = os.ttyname(pty_slave) self._logger.debug('TTY slave for the virtual HCI: %s', hci_tty) try: subprocess.check_call(['hciattach', hci_tty, 'any']) except subprocess.CalledProcessError: self._logger.error('Could not run hciattach on PTY device') raise self._inputs = [self._pty_fd, self._hci_socket] self._pty_buffer = StringIO() # Used as a seekable stream self._gatt_logger = GattLogger(self._logger) self._should_stop = False
def ttyname(self, fd): """ Fake C{os.ttyname}. Return a dumb string. """ return "foo"
def test_pty_serial_open(self): """Open serial port on slave""" ser = serial.Serial(os.ttyname(self.slave)) ser.close()
def _start_process(self): act = 'Start' if self._reloads == 0 else 'Restart' logger.info('%sing dev server at http://%s:%s ?', act, self._config.host, self._config.main_port) try: tty_path = os.ttyname(sys.stdin.fileno()) except OSError: # pragma: no branch # fileno() always fails with pytest tty_path = '/dev/tty' except AttributeError: # on windows, without a windows machine I've no idea what else to do here tty_path = None self._process = Process(target=serve_main_app, args=(self._config, tty_path)) self._process.start()
def pty_make_controlling_tty(self,tty_fd): # borrow this code from pwntools child_name = os.ttyname(tty_fd) # Disconnect from controlling tty. Harmless if not already connected. try: fd = os.open("/dev/tty", os.O_RDWR | os.O_NOCTTY) if fd >= 0: os.close(fd) # which exception, shouldnt' we catch explicitly .. ? except OSError: # Already disconnected. This happens if running inside cron. pass os.setsid() # Verify we are disconnected from controlling tty # by attempting to open it again. try: fd = os.open("/dev/tty", os.O_RDWR | os.O_NOCTTY) if fd >= 0: os.close(fd) raise Exception('Failed to disconnect from ' + 'controlling tty. It is still possible to open /dev/tty.') # which exception, shouldnt' we catch explicitly .. ? except OSError: # Good! We are disconnected from a controlling tty. pass # Verify we can open child pty. fd = os.open(child_name, os.O_RDWR) if fd < 0: raise Exception("Could not open child pty, " + child_name) else: os.close(fd) # Verify we now have a controlling tty. fd = os.open("/dev/tty", os.O_WRONLY) if fd < 0: raise Exception("Could not open controlling tty, /dev/tty") else: os.close(fd)
def __pty_make_controlling_tty(self, tty_fd): """This makes the pseudo-terminal the controlling tty. This should be more portable than the pty.fork() function. Specifically, this should work on Solaris. """ child_name = os.ttyname(tty_fd) # Disconnect from controlling tty if still connected. fd = os.open("/dev/tty", os.O_RDWR | os.O_NOCTTY) if fd >= 0: os.close(fd) os.setsid() # Verify we are disconnected from controlling tty try: fd = os.open("/dev/tty", os.O_RDWR | os.O_NOCTTY) if fd >= 0: os.close(fd) raise ExceptionPexpect, "Error! We are not disconnected from a controlling tty." except: # Good! We are disconnected from a controlling tty. pass # Verify we can open child pty. fd = os.open(child_name, os.O_RDWR) if fd < 0: raise ExceptionPexpect, "Error! Could not open child pty, " + child_name else: os.close(fd) # Verify we now have a controlling tty. fd = os.open("/dev/tty", os.O_WRONLY) if fd < 0: raise ExceptionPexpect, "Error! Could not open controlling tty, /dev/tty" else: os.close(fd)
def __pty_make_controlling_tty(self, tty_fd): '''This makes the pseudo-terminal the controlling tty. This should be more portable than the pty.fork() function. Specifically, this should work on Solaris. ''' child_name = os.ttyname(tty_fd) # Disconnect from controlling tty. Harmless if not already connected. try: fd = os.open("/dev/tty", os.O_RDWR | os.O_NOCTTY) if fd >= 0: os.close(fd) # which exception, shouldnt' we catch explicitly .. ? except OSError: # Already disconnected. This happens if running inside cron. pass os.setsid() # Verify we are disconnected from controlling tty # by attempting to open it again. try: fd = os.open("/dev/tty", os.O_RDWR | os.O_NOCTTY) if fd >= 0: os.close(fd) raise Exception('Failed to disconnect from ' + 'controlling tty. It is still possible to open /dev/tty.') # which exception, shouldnt' we catch explicitly .. ? except OSError: # Good! We are disconnected from a controlling tty. pass # Verify we can open child pty. fd = os.open(child_name, os.O_RDWR) if fd < 0: raise Exception("Could not open child pty, " + child_name) else: os.close(fd) # Verify we now have a controlling tty. fd = os.open("/dev/tty", os.O_WRONLY) if fd < 0: raise Exception("Could not open controlling tty, /dev/tty") else: os.close(fd)
def pty_make_controlling_tty(tty_fd): """ This makes the pseudo-terminal the controlling tty. This should be more portable than the pty.fork() function. Specifically, this should work on Solaris. Thanks to pexpect: http://pexpect.sourceforge.net/pexpect.html """ child_name = os.ttyname(tty_fd) # Disconnect from controlling tty. Harmless if not already connected. try: fd = os.open("/dev/tty", os.O_RDWR | os.O_NOCTTY) if fd >= 0: os.close(fd) # which exception, shouldnt' we catch explicitly .. ? except: # Already disconnected. This happens if running inside cron. pass os.setsid() # Verify we are disconnected from controlling tty # by attempting to open it again. try: fd = os.open("/dev/tty", os.O_RDWR | os.O_NOCTTY) if fd >= 0: os.close(fd) raise Exception('Failed to disconnect from controlling ' 'tty. It is still possible to open /dev/tty.') # which exception, shouldnt' we catch explicitly .. ? except: # Good! We are disconnected from a controlling tty. pass # Verify we can open child pty. fd = os.open(child_name, os.O_RDWR) if fd < 0: raise Exception("Could not open child pty, " + child_name) else: os.close(fd) # Verify we now have a controlling tty. if os.name != 'posix': # Skip this on BSD-like systems since it will break. fd = os.open("/dev/tty", os.O_WRONLY) if fd < 0: raise Exception("Could not open controlling tty, /dev/tty") else: os.close(fd)