# -*- coding: utf-8 -*-
import paramiko
s = paramiko.SSHClient()
s.set_missing_host_key_policy(paramiko.AutoAddPolicy())
s.connect('******',22,'*****','****')
print('connected!')
while True:
i = raw_input('shuru:')
stdin,stdout,stderr = s.exec_command('cd /home/pregw/src/gateway/info;cat *.info')
print('exec_command over!')
if i == 'y':
errs = stderr.readlines()
print(errs)
else:
lines = stdout.readlines()
print(len(lines))
在下面这行直接卡住不懂,ctrl+c无法停止,只能kill进程
errs = stderr.readlines()
跟进去调试发现卡在调试信息的最后一行不懂了,貌似是死锁了?一直在这个函数,s也跟不进去
-> waiter.acquire()
这个只是单写了个测试程序,之前的程序是多线程在多主机执行任务;两个程序出现的错误相同,
最重要的是,远程其它主机都正常,唯独其中一台主机读错误时会卡在哪里,而且唯独远程执行这个命令会卡住,其它命令例如'ls',可以正常打印出stderr.readlines() 的值为空列表[],有没有大神知道是什么原因?
下面是调试过程:
--Call--
> /usr/lib/python2.6/site-packages/paramiko/file.py(244)readlines()
-> def readlines(self, sizehint=None):
(Pdb) self
>>
(Pdb) n
> /usr/lib/python2.6/site-packages/paramiko/file.py(256)readlines()
-> lines = []
(Pdb) n
> /usr/lib/python2.6/site-packages/paramiko/file.py(257)readlines()
-> bytes = 0
(Pdb)