Reputation: 16080
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.
Upvotes: 3
Views: 11759
Reputation: 422
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.
Upvotes: 0
Reputation: 66729
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:
-
Upvotes: 8