|
System | : | Linux MiraNet 3.0.0-14-generic-pae #23-Ubuntu SMP Mon Nov 21 22:07:10 UTC 2011 i686 |
Software | : | Apache. PHP/5.3.6-13ubuntu3.10 |
ID | : | uid=65534(nobody) gid=65534(nogroup) groups=65534(nogroup)
|
|
Safe Mode | : | OFF |
Open_Basedir | : | OFF |
Freespace | : | 24 GB of 70.42 GB (34.09%) |
|
MySQL: ON MSSQL: OFF Oracle: OFF PostgreSQL: OFF Curl: OFF Sockets: ON Fetch: OFF Wget: ON Perl: ON |
Disabled Functions: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,
|
[ System Info ]
[ Processes ]
[ SQL Manager ]
[ Eval ]
[ Encoder ]
[ Mailer ]
[ Back Connection ]
[ Backdoor Server ]
[ Kernel Exploit Search ]
[ MD5 Decrypter ]
[ Reverse IP ]
[ Kill Shell ]
[ FTP Brute-Force ]
|
|
/
usr/
share/
pyshared/
landscape/
lib/
- drwxr-xr-x
|
Viewing file: twisted_util.py (2.9 KB) -rw-r--r--Select action/file-type:  ( +) |  ( +) |  ( +) | Code ( +) | Session ( +) |  ( +) | SDB ( +) |  ( +) |  ( +) |  ( +) |  ( +) |  ( +) |
from twisted.internet.defer import DeferredList, Deferred from twisted.internet.protocol import ProcessProtocol from twisted.internet.process import Process, ProcessReader from twisted.internet import reactor
import cStringIO
def gather_results(deferreds, consume_errors=False): d = DeferredList(deferreds, fireOnOneErrback=1, consumeErrors=consume_errors) d.addCallback(lambda r: [x[1] for x in r]) d.addErrback(lambda f: f.value.subFailure) return d
class AllOutputProcessProtocol(ProcessProtocol): """A process protocol for getting stdout, stderr and exit code."""
def __init__(self, deferred): self.deferred = deferred self.outBuf = cStringIO.StringIO() self.errBuf = cStringIO.StringIO() self.outReceived = self.outBuf.write self.errReceived = self.errBuf.write
def processEnded(self, reason): out = self.outBuf.getvalue() err = self.errBuf.getvalue() e = reason.value code = e.exitCode if e.signal: self.deferred.errback((out, err, e.signal)) else: self.deferred.callback((out, err, code))
def spawn_process(executable, args=(), env={}, path=None, uid=None, gid=None, wait_pipes=True): """ Spawn a process using Twisted reactor.
Return a deferred which will be called with process stdout, stderr and exit code.
@param wait_pipes: if set to False, don't wait for stdin/stdout pipes to close when process ends.
@note: compared to reactor.spawnProcess, this version does NOT require the executable name as first element of args. """
list_args = [executable] list_args.extend(args)
result = Deferred() protocol = AllOutputProcessProtocol(result) process = reactor.spawnProcess(protocol, executable, args=list_args, env=env, path=path, uid=uid, gid=gid)
if not wait_pipes: def maybeCallProcessEnded(): """A less strict version of Process.maybeCallProcessEnded.
This behaves exactly like the original method, but in case the process has ended already and sent us a SIGCHLD, it doesn't wait for the stdin/stdout pipes to close, because the child process itself might have passed them to its own child processes.
@note: Twisted 8.2 now has a processExited hook that could be used in place of this workaround. """ if process.pipes and not process.pid: for pipe in process.pipes.itervalues(): if isinstance(pipe, ProcessReader): # Read whatever is left pipe.doRead() pipe.stopReading() process.pipes = {} Process.maybeCallProcessEnded(process)
process.maybeCallProcessEnded = maybeCallProcessEnded
return result
|