This starts the given command in a child process. This does all the fork/exec type of stuff for a pty. This is called by __init__. The args parameter is a list, command is a string.
00225 : """This starts the given command in a child process. This does all the fork/exec type of stuff for a pty. This is called by __init__. The args parameter is a list, command is a string. """ # The pid and child_fd of this object get set by this method. # Note that it is difficult for this method to fail. # You cannot detect if the child process cannot start. # So the only way you can tell if the child process started # or not is to try to read from the file descriptor. If you get # EOF immediately then it means that the child is already dead. # That may not necessarily be bad, because you may haved spawned a child # that performs some task; creates no stdout output; and then dies. # It is a fuzzy edge case. Any child process that you are likely to # want to interact with Pexpect would probably not fall into this # category. # FYI, This essentially does a fork/exec operation. assert self.pid == None, 'The pid member is not None.' assert self.command != None, 'The command member is None.' if _which(self.command) == None: raise ExceptionPexpect ('The command was not found or was not executable: %s.' % self.command) try: self.pid, self.child_fd = pty.fork() except OSError, e: raise ExceptionPexpect('Pexpect: pty.fork() failed: ' + str(e)) if self.pid == 0: # Child try: # Some platforms do not like setwinsize (Cygwin). self.child_fd = sys.stdout.fileno() self.setwinsize(24, 80) except: pass # Do not allow child to inherit open file descriptors from parent. max_fd = resource.getrlimit(resource.RLIMIT_NOFILE) for i in range (3, max_fd): try: os.close (i) except OSError: pass os.execvp(self.command, self.args) # Parent self.__child_fd_owner = 1 def fileno (self): # File-like object.