python - paramiko combine stdout and stderr -
i trying combine output of stdout , stderr. belief can done set_combine_stderr() of channel object.
this doing:
ssh = paramiko.sshclient() #i connect , ok, then: chan = ssh.invoke_shell() chan.set_combine_stderr(true) chan.exec_command('python2.6 subir.py') resultado = chan.makefile('rb', -1.)   however, following error when try store result (last line above, chan.makefile() ):
error: channel closed.
any appreciated
while true set_combine_stderr diverts stderr stdout stream, in chaotic order, not result want, namely, lines combined in order written, if running command in local terminal window. instead, use get_pty. cause server run lines through pseudo-terminal, keeping them in chronological sequence.
here's test program, outerr.py, writes alternating lines on stdout , stdin. assume it's sitting in home directory of llmps@meerkat2.
#!/usr/bin/env python  import sys  x in xrange(1, 101):     (sys.stdout, sys.stderr)[x%2].write('this line #%s, on std%s.\n' %                 (x, ('out', 'err')[x%2]))   now try following code run remotely:
#!/usr/bin/env python  import paramiko  def connect():     ssh = paramiko.sshclient()     ssh.set_missing_host_key_policy(paramiko.autoaddpolicy())     ssh.connect('meerkat2', username='llmps', password='..')     return ssh  def runtest(ssh):     tran = ssh.get_transport()     chan = tran.open_session()     # chan.set_combine_stderr(true)     chan.get_pty()     f = chan.makefile()     chan.exec_command('./outerr.py')     print f.read(),  if __name__ == '__main__':     ssh = connect()     runtest(ssh)     ssh.close()   if run above, should see 100 lines in order written. if, instead, comment out chan.get_pty() call , uncomment chan.set_combine_stderr(true) call, clumps of stdout , stderr lines interspersed randomly run run.
Comments
Post a Comment