3
我試圖檢查正在運行的嵌入式系統的日誌文件中的錯誤。tail -f通過ssh與Paramiko有一個遞增的延遲
我已經在我的腳本中實現了paramiko,因爲我被告知這是在python中使用ssh的最佳方式。
現在,當我尾巴的日誌文件,我看到有一個很大的延遲建立。隨着每分鐘約30秒增加。
我已經使用了一個grep來減少打印的行數,因爲我認爲我收到了太多的輸入,但事實並非如此。
如何減少延遲或阻止延遲在運行時增加。我想尾巴小時...
def mkssh_conn(addr):
"""returns an sshconnection"""
paramiko.util.logging.getLogger('paramiko').setLevel(logging.WARN)
sshcon = paramiko.SSHClient()
sshcon.set_missing_host_key_policy(paramiko.AutoAddPolicy())
sshcon.connect(addr , username, password)
return sshcon
while True:
BUF_SIZE = 1024
client = mkssh_conn() #returns a paramiko.SSHClient()
transport = client.get_transport()
transport.set_keepalive(1)
channel = transport.open_session()
channel.settimeout(delta)
channel.exec_command('killall tail')
channel = transport.open_session()
channel.settimeout(delta)
cmd = "tail -f /log/log.log | grep -E 'error|statistics'"
channel.exec_command(cmd)
while transport.is_active():
print "transport is active"
rl, wl, xl = select.select([channel], [], [], 0.0)
if len(rl) > 0:
buf = channel.recv(BUF_SIZE)
if len(buf) > 0:
lines_to_process = LeftOver + buf
EOL = lines_to_process.rfind("\n")
if EOL != len(lines_to_process)-1:
LeftOver = lines_to_process[EOL+1:]
lines_to_process = lines_to_process[:EOL]
else:
LeftOver = ""
for line in lines_to_process.splitlines():
if "error" in line:
report_error(line)
print line
client.close()
它沒有發生 – studioj