class documentation

class twisted.internet.process.Process(_BaseProcess): (source)

Implements interfaces: twisted.internet.interfaces.IProcessTransport

View In Hierarchy

An operating-system Process.

This represents an operating-system process with arbitrary input/output pipes connected to it. Those pipes may represent standard input, standard output, and standard error, or any other file descriptor.

On UNIX, this is implemented using fork(), exec(), pipe() and fcntl(). These calls may not exist elsewhere so this code is not cross-platform. (also, windows can only select on sockets...)

Class Variable debug Undocumented
Class Variable debug_child Undocumented
Class Variable status Undocumented
Class Variable pid From before IProcessProtocol.makeConnection is called to before IProcessProtocol.processEnded is called, pid is an int giving the platform process ID of this process. pid is None at all other times.
Method __init__ Spawn an operating-system process.
Instance Variable pipes Undocumented
Instance Variable proto Undocumented
Method writeToChild Similar to ITransport.write but also allows the file descriptor in the child process which will receive the bytes to be specified.
Method closeChildFD Close a file descriptor which is connected to the child process, identified by its FD in the child process.
Method pauseProducing Undocumented
Method resumeProducing Undocumented
Method closeStdin Call this to close standard input on this process.
Method closeStdout Close stdout.
Method closeStderr Close stderr.
Method loseConnection Close stdin, stderr and stdout.
Method write Call this to write to standard input on this process.
Method registerProducer Call this to register producer for standard input.
Method unregisterProducer Call this to unregister producer for standard input.
Method writeSequence Call this to write to standard input on this process.
Method childDataReceived Undocumented
Method childConnectionLost Undocumented
Method maybeCallProcessEnded Call processEnded on protocol after final cleanup.
Method getHost Similar to getPeer, but returns an address describing this side of the connection.
Method getPeer Get the remote address of this connection.
Method _setupChild fdmap[childFD] = parentFD

Inherited from _BaseProcess:

Method reapProcess Try to reap a process (without blocking) via waitpid.
Method signalProcess No summary
Method __repr__ String representation of a process.
Method _getReason Undocumented
Method _resetSignalDisposition Undocumented
Method _fork Fork and then exec sub-process.
Method _execChild The exec() which is done in the forked child.

Inherited from BaseProcess (via _BaseProcess):

Class Variable lostProcess Undocumented
Method processEnded This is called when the child terminates.
Method _callProcessExited Undocumented
debug = (source)

Undocumented

(type: bool)
debug_child = (source)

Undocumented

(type: bool)
status = (source)

Undocumented

(type: int)

From before IProcessProtocol.makeConnection is called to before IProcessProtocol.processEnded is called, pid is an int giving the platform process ID of this process. pid is None at all other times.

def __init__(self, reactor, executable, args, environment, path, proto, uid=None, gid=None, childFDs=None): (source)

Spawn an operating-system process.

This is where the hard work of disconnecting all currently open files / forking / executing the new process happens. (This is executed automatically when a Process is instantiated.)

This will also run the subprocess as a given user ID and group ID, if specified. (Implementation Note: this doesn't support all the arcane nuances of setXXuid on UNIX: it will assume that either your effective or real UID is 0.)

pipes = (source)

Undocumented

(type: dict)
def _setupChild(self, fdmap): (source)

fdmap[childFD] = parentFD

The child wants to end up with 'childFD' attached to what used to be the parent's parentFD. As an example, a bash command run like 'command 2>&1' would correspond to an fdmap of {0:0, 1:1, 2:1}. 'command >foo.txt' would be {0:0, 1:os.open('foo.txt'), 2:2}.

This is accomplished in two steps:

    1. close all file descriptors that aren't values of fdmap.  This
       means 0 .. maxfds (or just the open fds within that range, if
       the platform supports '/proc/<pid>/fd').

    2. for each childFD::

         - if fdmap[childFD] == childFD, the descriptor is already in
           place.  Make sure the CLOEXEC flag is not set, then delete
           the entry from fdmap.

         - if childFD is in fdmap.values(), then the target descriptor
           is busy. Use os.dup() to move it elsewhere, update all
           fdmap[childFD] items that point to it, then close the
           original. Then fall through to the next case.

         - now fdmap[childFD] is not in fdmap.values(), and is free.
           Use os.dup2() to move it to the right place, then close the
           original.
def writeToChild(self, childFD, data): (source)

Similar to ITransport.write but also allows the file descriptor in the child process which will receive the bytes to be specified.

ParameterschildFDThe file descriptor to which to write.
dataThe bytes to write.
RaisesKeyErrorIf childFD is not a file descriptor that was mapped in the child when IReactorProcess.spawnProcess was used to create it.
def closeChildFD(self, childFD): (source)

Close a file descriptor which is connected to the child process, identified by its FD in the child process.

def pauseProducing(self): (source)

Undocumented

def resumeProducing(self): (source)

Undocumented

def closeStdin(self): (source)

Call this to close standard input on this process.

def closeStdout(self): (source)
def closeStderr(self): (source)
def loseConnection(self): (source)

Close stdin, stderr and stdout.

def write(self, data): (source)

Call this to write to standard input on this process.

NOTE: This will silently lose data if there is no standard input.

def registerProducer(self, producer, streaming): (source)

Call this to register producer for standard input.

If there is no standard input producer.stopProducing() will be called immediately.

def unregisterProducer(self): (source)

Call this to unregister producer for standard input.

def writeSequence(self, seq): (source)

Call this to write to standard input on this process.

NOTE: This will silently lose data if there is no standard input.

def childDataReceived(self, name, data): (source)

Undocumented

def childConnectionLost(self, childFD, reason): (source)

Undocumented

def maybeCallProcessEnded(self): (source)

Call processEnded on protocol after final cleanup.

def getHost(self): (source)

Similar to getPeer, but returns an address describing this side of the connection.

ReturnsAn IAddress provider.
def getPeer(self): (source)

Get the remote address of this connection.

Treat this method with caution. It is the unfortunate result of the CGI and Jabber standards, but should not be considered reliable for the usual host of reasons; port forwarding, proxying, firewalls, IP masquerading, etc.

ReturnsAn IAddress provider.
API Documentation for Twisted, generated by pydoctor 20.12.1 at 2021-02-28 19:53:36.