2017-12-19 160 views
1

これは便利だとわかりましたSetting timelimit for sftp.get() of Paramiko moduleしかし、ここではコールバック関数も接続確立の時間を考慮しています。私はSFTP getファイル転送時間だけを制限する必要があります。私は以下のようにコールバック関数を変更しようとしましたが、うまくいきません。ここに私のコードです。Paramikoのsftp.getのタイムアウト

class TimeLimitExceeded(Exception): 
    pass 

def _timer(start_time, timelimit=5): 
    elapsed_time = time.time()-start_time 
    if elapsed_time > timelimit: 
     raise TimeLimitExceeded 

if __name__=="__main__": 

    ssh = paramiko.SSHClient() 
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
    ssh.connect(ip, port, username, password) 
    sftp = ssh.open_sftp() 
    try: 
     start_time=time.time() 
     sftp.get(remote_path, local_path, _timer(start_time)) 
    except TimeLimitExceeded: 
     print ("The operation took too much time to complete") 
    finally: 
     sftp.close() 
     ssh.close() 
+0

こんにちは@MartinPrikryl、私は最近、pythonで働き始めました。上記のコードでは、コールバック関数も接続確立時間を考慮しています。私はファイル転送時間だけを制限する必要があります。コールバック関数を修正しようとしましたが、開始時刻をsftp getコールの直前の時刻に使用しても機能しません。 – nilesh

答えて

0
sftp.get(remote_path, local_path, _timer(start_time)) 

あなたは_timer関数を呼び出すと、(それが何を持っていない)、その戻り値を渡している、ここでコールバックとして_timerを渡していません。

これは、(元のコードが行うように)正しい:

sftp.get(remote_path, local_path, _timer)