3

Paramikoモジュールを使用してサーバーにログインしています(一部の場合はssh、その他の場合はsftp)。サーバー上の特定のフォルダからテキストファイルとログファイルを問題なく取得できます。ただし、.txtファイルと.logファイルを持つ多くのサブディレクトリがあります。getメソッドが受け入れない場所(* .txt)をいくつか読みました。誰かがこれを回避する方法を知っていますか?サーバーにログインして特定のログを取得するために現在使用しているコードは次のとおりです。

 import paramiko
 import sys
 import os





 ssh = paramiko.SSHClient()
 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
 ssh.connect('10.5.48.74', username='root', password='******')

 ftp = ssh.open_sftp()
 ftp.get('/var/opt/crindbios/log/crindbios.log', '.')
 ftp.close()
4

2 に答える 2

7

次のスクリプトでファイルのリストを取得します。次に、ftp.getを使用してリストを繰り返し処理します

import paramiko
import os

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('localhost',username='****')  

apath = '/var/log'
apattern = '"*.log"'
rawcommand = 'find {path} -name {pattern}'
command = rawcommand.format(path=apath, pattern=apattern)
stdin, stdout, stderr = ssh.exec_command(command)
filelist = stdout.read().splitlines()

ftp = ssh.open_sftp()
for afile in filelist:
    (head, filename) = os.path.split(afile)
    print(filename)
    ftp.get(afile, './'+filename)
ftp.close()
ssh.close()

これは、dustyprogrammerが提案したものです。リモートサーバーで、シェルコマンドを適用してファイルリストを取得します。次に、Pythonでリストを後処理します。

ダウンロードするには、ファイルごとに新しいファイルパスを作成する必要があります-提案したディレクトリへのダウンロードは機能しません(私にとって)。

于 2011-07-14T15:09:07.713 に答える
1

ファイル名は、 から簡単にアクセスできますsftp.listdir()。したがって、私はこのようにします

import os
import paramiko
rserver = "raspberrypi"
ruser = "pi"
rpassword ="<your-password>"
rdirectory_charging_log = "/home/pi/logs/"
directory_charging_log = "/Users/<your-user>/logs/"
ssh = paramiko.SSHClient() 
ssh.load_host_keys(os.path.expanduser(os.path.join("~", ".ssh", "known_hosts")))
ssh.connect(rserver, username=ruser, password=rpassword)
sftp = ssh.open_sftp()
rfiles = sftp.listdir(rdirectory_charging_log)
rfile = ""
for rfile in rfiles: 
    sftp.get(rdirectory_charging_log+rfile, directory_charging_log+rfile)
sftp.close()
ssh.close()
于 2019-08-17T18:36:16.007 に答える