2012-03-24 12 views
1

paramikoとsftpクライアントを使用して最後の行のログファイルをポーリングします。私は、Pythonでsshtailモジュールを認識していますが、それを使用することは、現在のコーディング標準に反しています。Paramiko - ログファイルの最後の行を取得するためにsftpクライアントを使用

これまで私はこれを使用していましたが、今はログファイルの最後の行を読む方法を知りましたか?それはより速く、ちょうどシェル経由でリモートからファイルにtail -n1を呼び出し、その標準出力を読みやすくすることができ

try: 
    self.logger.info("SSH Log: trying to connect to: " + self.ssh_server_ip + "," + str(self.ssh_port) + "," + self.ssh_username + "," + self.ssh_password) 
    client = paramiko.SSHClient() 
    client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
    client.connect(self.ssh_server_ip, self.log_server_port, self.ssh_username, self.ssh_password) 
    self.logger.info("SSH LOG: Deleting files from HTTP Upload Server") 
    sftp = client.open_sftp() 
    remote_command = "tail -n1 /var/log/apache2/access.log" 
    stdin, stdout, stderr = client.exec_command(remote_command) 
    last_line = stdout.read() 
    old_line = last_line 
    while 1: 
     remote_command = "tail -n1 /var/log/apache2/access.log" 
     stdin, stdout, stderr = client.exec_command(remote_command) 
     last_line = stdout.read() 
     if last_line != old_line: 
      finish_line = last_line 
      break 
    self.logger.info("SSH Log: closing connection") 
    sftp.close() 
    client.close() 
    except Exception, e: 
     self.logger.error(str(e)) 
     self.logger.error("Failed to delete file on HTTP server: " + str(e)) 
    except: 
     self.logger.error("Failed to delete file on HTTP server") 
+0

ファイルがリモートサーバーにあると仮定していますか?これまでに何を試しましたか? – Ben

+0

これは、Ubuntu 11.10を実行しているリモートのLinuxサーバ上にあります。私はちょうどsshtailモジュールをファイルの末尾に使用しました。私はブランクでないログしか期待してはいけません。私がそれを得ると、私はそれを保存し、それを解析します。 – Parth

+0

私はあなたが問題を解決しようとしている投稿するコードはありますか?コードを尋ねるのではなく、最初にいくつかの試みをすることが期待されています。[ask] – Ben

答えて

2

おかげで、

Parth

EDIT2。次のようなものがあります。

remote_command = "tail -n1 /var/log/apache2/access.log" 
stdin, stdout, stderr = client.exec_command(remote_command) 
last_line = stdout.read() 
+0

私はちょうど実際に尾をする必要がありますか?あなたが求めていることをするコードを提供してもらえますか? – Parth

+0

'tail -f'は* follow *モードです - おそらくあなたが望むものではありません。私はいくつかのコードで私の応答を更新しました。 –

+0

-n1はファイルの最後の行を取得します。私はファイルがダウンロードされるのを待っており、アクセスログはダウンロードが完了したことを示します。それでは、どうすればtail -f – Parth

関連する問題