目前有一个脚本,脚本功能就是通过ssh读取远端的日志,然后tail似输出.脚本如下:
from sshtail import SSHTailer ,load_rss_key
from time import sleep
pkey=load_rsa_key('id_rsa')
tailer = SSHTailer('root@10.0.16.3', '/var/log/mytest.log',private_key=pkey)
while 1:
for line in tailer.tail():
print line
sleep(1)
脚本在正常情况下可以正常运行,但是当那个日志文件不存在的时候,就会raise 一个ioerror exception,
于是我改脚本,思路是当碰到这个ioerror 的时候我不退出脚本,取而代之的是sleep 5秒(5s 内我会自己去创建那个mytest.log文件)然后再继续干活.
于是改成如下:
#!/usr/bin/python
from sshtail import SSHTailer ,load_rsa_key
from time import sleep
pkey=load_rsa_key('id_rsa')
tailer = SSHTailer('root@10.0.16.3', '/var/log/mytest.log',private_key=pkey)
try:
while 1:
for line in tailer.tail():
print line
sleep(1)
except IOError, e:
print "error: %s"%e
print 'catch an io error'
#tailer.disconnect()
sleep(5.0)
while 1:
for line in tailer.tail():
print line
sleep(1)
最后发现还是会退出脚本。报错如下:
error: [Errno 2] No such file
catch an io error
Traceback (most recent call last):
File "/home/wumin/1.py", line 24, in <module>
for line in tailer.tail():
File "/usr/local/lib/python2.7/site-packages/sshtail/tailers.py", line 57, in tail
fstat = self.sftp_client.stat(self.remote_filename)
File "/usr/local/lib/python2.7/site-packages/paramiko/sftp_client.py", line 413, in stat
t, msg = self._request(CMD_STAT, path)
File "/usr/local/lib/python2.7/site-packages/paramiko/sftp_client.py", line 729, in _request
return self._read_response(num)
File "/usr/local/lib/python2.7/site-packages/paramiko/sftp_client.py", line 776, in _read_response
self._convert_status(msg)
File "/usr/local/lib/python2.7/site-packages/paramiko/sftp_client.py", line 802, in _convert_status
raise IOError(errno.ENOENT, text)
IOError: [Errno 2] No such file
我的目的就是要在我这个脚本里面实现,发现 ioerror exception 不退出脚本,而是sleep ,然后等那个/var/log/mytest.log生成了以后还是继续干活.
这个该怎么处理这个exception呢.要改sshtail这个库或者 paramiko里面的代码才能做到吗?一定要在所有涉及到的代码里面都处理这个ioerror exception才能做到吗?
求教
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.