Python 线程脚本中的脚本 open_sftp_client 错误
Python Script open_sftp_client error in threaded script
我编写此脚本是为了将更新文件复制到该领域的数千个客户端。除了客户端超时外,它工作正常。我正在捕获异常,但它杀死了我的脚本。将不胜感激有关如何调整此脚本以防止其死亡的一些建议。下面是异常的输出和杀死脚本的错误。
('ABCD SAT6', 'Timed Out') [Errno 113] 没有到主机的路由
回溯(最后一次调用):
文件 "StackUpdateLocoImage.py",第 48 行,位于
pool.map(工人,档案)
地图中的文件“/usr/lib64/python2.6/multiprocessing/pool.py”,第 148 行
return self.map_async(func, iterable, chunksize).get()
文件“/usr/lib64/python2.6/multiprocessing/pool.py”,第 422 行,在 get
提高 self._value
AttributeError: 'NoneType' 对象没有属性 'open_sftp_client'
#!/usr/bin/python
import paramiko, os, string, threading
import socket
import sys
import logging
import multiprocessing
##Python Logging##
LOG_FILENAME = 'updateLocos.out'
logging.basicConfig(filename=LOG_FILENAME, level=logging.DEBUG,)
## Paramiko Logging##
paramiko.util.log_to_file("Paramiko_Connections.log")
def worker(line):
locoid = line.split()
try:
if locoid[0] == 'ABCD' :
locoip = locoid[4]
##Start SFTP
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(locoip, username='user', password='password', timeout=3.0)
except paramiko.AuthenticationException,e:
print ('ABCD ' + locoid[1], 'Auth Error: ',e)
#exit()
except paramiko.SSHException,e:
print "Connection Error: ",e
#exit()
except socket.error,e:
print ('ABCD ' + locoid[1], 'Timed Out'),e
#exit()
filepath = '/usr/local/bin/scripts/update3.2.2.tar.gz'
localpath = '/root/update3.2.2.tar.gz'
sftp = ssh.open_sftp()
sftp.put(filepath, localpath)
sftp.close()
ssh.close()
## set up processing pool
pool = multiprocessing.Pool()
with open('hostslists.txt') as infile:
pool.map(worker, infile)
pool.close()
pool.join()
你没有发现这个错误:
AttributeError: 'NoneType' object has no attribute 'open_sftp_client'
事情是你有一堆 except 但是然后你继续执行就像什么都没发生一样,当它到达这一行时:
sftp = ssh.open_sftp()
变量ssh
是None
。
所以取消注释您的 exit()
或将它们更改为 return
。
我编写此脚本是为了将更新文件复制到该领域的数千个客户端。除了客户端超时外,它工作正常。我正在捕获异常,但它杀死了我的脚本。将不胜感激有关如何调整此脚本以防止其死亡的一些建议。下面是异常的输出和杀死脚本的错误。
('ABCD SAT6', 'Timed Out') [Errno 113] 没有到主机的路由
回溯(最后一次调用): 文件 "StackUpdateLocoImage.py",第 48 行,位于 pool.map(工人,档案) 地图中的文件“/usr/lib64/python2.6/multiprocessing/pool.py”,第 148 行 return self.map_async(func, iterable, chunksize).get() 文件“/usr/lib64/python2.6/multiprocessing/pool.py”,第 422 行,在 get 提高 self._value AttributeError: 'NoneType' 对象没有属性 'open_sftp_client'
#!/usr/bin/python
import paramiko, os, string, threading
import socket
import sys
import logging
import multiprocessing
##Python Logging##
LOG_FILENAME = 'updateLocos.out'
logging.basicConfig(filename=LOG_FILENAME, level=logging.DEBUG,)
## Paramiko Logging##
paramiko.util.log_to_file("Paramiko_Connections.log")
def worker(line):
locoid = line.split()
try:
if locoid[0] == 'ABCD' :
locoip = locoid[4]
##Start SFTP
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(locoip, username='user', password='password', timeout=3.0)
except paramiko.AuthenticationException,e:
print ('ABCD ' + locoid[1], 'Auth Error: ',e)
#exit()
except paramiko.SSHException,e:
print "Connection Error: ",e
#exit()
except socket.error,e:
print ('ABCD ' + locoid[1], 'Timed Out'),e
#exit()
filepath = '/usr/local/bin/scripts/update3.2.2.tar.gz'
localpath = '/root/update3.2.2.tar.gz'
sftp = ssh.open_sftp()
sftp.put(filepath, localpath)
sftp.close()
ssh.close()
## set up processing pool
pool = multiprocessing.Pool()
with open('hostslists.txt') as infile:
pool.map(worker, infile)
pool.close()
pool.join()
你没有发现这个错误:
AttributeError: 'NoneType' object has no attribute 'open_sftp_client'
事情是你有一堆 except 但是然后你继续执行就像什么都没发生一样,当它到达这一行时:
sftp = ssh.open_sftp()
变量ssh
是None
。
所以取消注释您的 exit()
或将它们更改为 return
。