如何使用paramiko与远程应用程序交谈?

时间:2011-12-09 18:33:51

标签: python stdio paramiko

我正在尝试使用paramiko与命令行应用程序进行交互式说话,但我做错了。

# that's the echo.py, the script I am connecting to via SSH
import sys, time
while 1:
    x = sys.stdin.readline()
    sys.stdout.write("got-" + x) # x already contains newline



# client.py
import paramiko

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

ssh.connect('127.0.0.1', username='user', password='pass')

(stdin, stdout, stderr) = ssh.exec_command(r"python C:\test\echo.py")

stdin.write("xxx\n")
print "got back [%s]" % stdout.read()  # <<< here the code got stuck, getting nothing back

注意:唯一对我有用的情况是让echo.py退出并在客户端上执行stdout.readlines(),但显然这不是我想要的。

我需要能够使用stdin和stdout发送和接收消息,可选择使用某种超时支持。

1 个答案:

答案 0 :(得分:2)

我认为问题是当你运行sys.stdout.write时它会写入STDOUT缓冲区,但是在手动或关闭之前不会刷新缓冲区(stdout是File Object,你可以确认你自己type(sys.stdout))。由于您的循环是无限的,因此永远不会刷新缓冲区。

将echo.py中的循环改为此应该可以解决问题:

while 1:
    x = sys.stdin.readline()
    sys.stdout.write("got-" + x) # x already contains newline
    sys.stdout.flush() # flush the buffer