3

I'm running an SSH process like this:

sshproc = subprocess.Popen([command], shell=True)
exit = os.waitpid(sshproc.pid, 0)[1]

This works and opens an interactive terminal. Based on the documentation for subprocess, sshproc is using the script's sys.stdin.

The question is: how can I print to stderr or a file what input is being received to this child process? I am creating a logging API, and currently lose the ability to record what commands are run over this SSH session.

I don't need the answer, just a nudge in the right direction.

Thanks everyone!

EDIT: It is important that I start the process as shown above so that I can have a interactive SSH session with my user. E.g. I cannot use communicate() as far as I know.

sholsapp
  • 15,542
  • 10
  • 50
  • 67

2 Answers2

8
sshproc = subprocess.Popen([command],
                        shell=True,
                        stdin=subprocess.PIPE,
                        stdout=subprocess.PIPE,
                        stderr=subprocess.PIPE,
                        )

stdout_value, stderr_value = sshproc.communicate('through stdin to stdout')
print repr(stdout_value)
print repr(stderr_value)

Ah since you said nudge in right direction, I thought I should point you to good readups:

-

Community
  • 1
  • 1
pyfunc
  • 65,343
  • 15
  • 148
  • 136
  • Thanks for the suggestion, but when using `communicate` my users lose the ability to use the SSH terminal interactively. – sholsapp Sep 16 '10 at 18:33
0

correct link to @pyfunc's answer, http://pymotw.com/2/subprocess/ Very informative source, subprocess, allows calling any number of other processes or bash commands, with all piping customizations.

Atif Hussain
  • 412
  • 5
  • 9