在python/paramiko中保留对通道的引用
Python中的奇怪行为&在python/paramiko中保留对通道的引用,python,paramiko,Python,Paramiko,Python中的奇怪行为¶miko 1.7.7.1 我有一个函数和一个类,它们实际上具有完全相同的代码,但该类将其分为两个方法。paramiko库的行为不同 函数:打开ssh连接,运行命令,等待完成并获取退出值 类:在setup()中打开ssh连接,运行命令,在finish()中等待完成并获取退出值 我注意到,如果我在setup()中读取标准输出,它就会工作(注释掉) 我对两件事感兴趣 如何在将频道存储为成员时使类工作,以及 在改变行为的作业等方面,到底有什么不同之处 输出: [func
paramiko 1.7.7.1
我有一个函数和一个类,它们实际上具有完全相同的代码,但该类将其分为两个方法。paramiko
库的行为不同
函数:打开ssh连接,运行命令,等待完成并获取退出值
类:在setup()
中打开ssh连接,运行命令,在finish()
中等待完成并获取退出值
我注意到,如果我在setup()
中读取标准输出,它就会工作(注释掉)
我对两件事感兴趣
[function]
exitVal: 0
stdout: hello
[class]
exitVal: -1
stdout:
代码:
MY_SERVER
是一个基于密钥登录的主机名(无需密码)
from paramiko import SSHClient
SSH_SERVER = "MY_SERVER"
SSH_CMD = "echo 'hello'"
def working_function():
client = SSHClient()
client.load_system_host_keys()
# connect with current user credentials
client.connect(SSH_SERVER)
sshChannel = client.get_transport().open_session()
sshChannel.exec_command(SSH_CMD)
stdout = sshChannel.makefile('rb')
exitVal = sshChannel.recv_exit_status()
print "exitVal: {0}\nstdout: {1}\n".format(exitVal, stdout.read())
class NotWorkingClass:
def setup(self):
client = SSHClient()
client.load_system_host_keys()
# connect with current user credentials
client.connect(SSH_SERVER)
self.sshChannel = client.get_transport().open_session()
self.sshChannel.exec_command(SSH_CMD)
self.stdout = self.sshChannel.makefile('rb')
# works
# self.stdout.read()
def finish(self):
exitVal = self.sshChannel.recv_exit_status()
print "exitVal: {0}\nstdout: {1}\n".format(exitVal, self.stdout.read())
working_function()
c = NotWorkingClass()
c.setup()
c.finish()