6

に取り組んでいserver 1ます。server 2に接続してディレクトリから特定のファイル (名前が文字「HM」で始まるファイル) を取得し、実行時に作成する必要がある別のディレクトリに配置する必要がある Python スクリプトを作成する必要があります (プログラムを実行するたびに、新しいディレクトリを作成し、そこにファイルをダンプする必要があるためです) server 1

私はこれを Python で行う必要があり、この言語には比較的慣れていません。コードのどこから始めればよいかわかりません。ファイルを「tar」する必要のない解決策はありますか? Paramiko を確認しましたが、一度に 1 つのファイルを転送するだけです。グロブも見ましたが、使い方がわかりません。

4

4 に答える 4

4

paramiko をチェックしたいかもしれないファイルを転送するには

import os
import paramiko

localpath = '~/pathNameForToday/'
os.system('mkdir ' + localpath)
ssh = paramiko.SSHClient() 
ssh.load_host_keys(os.path.expanduser(os.path.join("~", ".ssh", "known_hosts")))
ssh.connect(server, username=username, password=password)
sftp = ssh.open_sftp()
sftp.get(remotepath, localpath)
sftp.close()
ssh.close() 

私はあなたがこれを行うことができるグロブを使用したい:

import os
import re
import glob

filesiwant = re.compile('^HM.+') #if your files follow a more specific pattern and you don't know regular expressions you can give me a sample name and i'll give you the regex4it
path = '/server2/filedir/'
for infile in glob.glob( os.path.join(path, '*') ):
    if filesiwant.match(infile):
         print "current file is: " + infile

それ以外の場合は、os.listdir() を使用する方が簡単です。

import os
for infile in os.listdir('/server2/filedir/'):
    ...`

それはあなたの質問に答えますか?そうでない場合はコメントを残してください

于 2012-10-11T05:31:57.990 に答える
1

Python は、このタスクの最初の選択肢ではありませんが、システムへの呼び出しを使用して、mkdir と rsync を実行できます。特に、あなたができる

import os
os.system("mkdir DIRECTORY")
os.system("rsync -cav user@server2:/path/to/files/HM* DIRECTORY/")
于 2012-10-11T04:11:38.920 に答える
0

を使用できますfabricfabfile.pyserver1 で作成します。

import os
from fabric.api import get, hosts

@hosts('server2')
def download(localdir):
    os.makedirs(localdir)  # create dir or raise an error if it already exists 
    return get('/remote/dir/HM*', localdir)  # download HM files to localdir

そして実行:fab download:/to/dirシェルの同じディレクトリから ( fabfile.pyis to fabas Makefileis to make)。

于 2012-10-11T04:11:48.367 に答える
0

ssh と tar を使用するだけです。Python を関与させる必要はありません

$ ssh server2 tar cf - HM* | tar xf -

リモート tar はローカル tar に直接パイプできます

于 2012-10-11T05:00:54.697 に答える