2017-02-08 30 views
0

ローカルマシンからparamikoを使用してリモートマシンにファイルをコピーするmy機能ですが、コピー先ディレクトリが存在するかどうかをチェックせずコピーを続行し、存在しませんsftpより前にリモートマシン上にディレクトリが存在するかどうかをチェック

def copyToServer(hostname, username, password, destPath, localPath): 
    transport = paramiko.Transport((hostname, 22)) 
    transport.connect(username=username, password=password) 
    sftp = paramiko.SFTPClient.from_transport(transport) 
    sftp.put(localPath, destPath) 
    sftp.close() 
    transport.close() 

リモートマシンのパスが存在するかどうかをチェックし、そうでない場合はエラーをスローします。

ありがとうございました

答えて

0

これが行います

def copyToServer(hostname, username, password, destPath, localPath): 
transport = paramiko.Transport((hostname, 22)) 

sftp = paramiko.SFTPClient.from_transport(transport) 
try: 
    sftp.put(localPath, destPath) 
    sftp.close() 
    transport.close() 
    print(" %s SUCCESS " % hostname) 
    return True 

except Exception as e: 
    try: 
     filestat=sftp.stat(destPath) 
     destPathExists = True 
    except Exception as e: 
     destPathExists = False 

    if destPathExists == False: 
    print(" %s FAILED - copying failed because directory on remote machine doesn't exist" % hostname) 
    log.write("%s FAILED - copying failed directory at remote machine doesn't exist\r\n" % hostname) 
    else: 
    print(" %s FAILED - copying failed" % hostname) 
    log.write("%s FAILED - copying failed\r\n" % hostname) 
    return False  
0

私はSFTPClient内でlistdirメソッドを使用します。パス全体が有効であることを確認するために、これを再帰的に使用する必要があります。

0

の方法はSFTPClientです。リモートパスが存在するかどうかをチェックし、存在しない場合はエラーを発生させます。

try: 
    sftp.chdir(destPath) 
except IOError as e: 
    raise e 
関連する問題