paramikoを使用して、いくつかのファイルをダウンロードして処理する必要があるSFTPサーバーに接続しています。
サーバーのタイムアウトは5分に設定されていますが、ファイルの処理にタイムアウトよりも時間がかかる場合があります。したがって、他のファイルを処理するためにサーバーの作業ディレクトリを変更したい場合sftp.chdir(target_dir))
、接続がタイムアウトしたという例外が発生します。
ファイルbuildbdist.win32eggparamikosftp://ftp.py、138行目、_write_allでEOFError()を発生させます
これに対抗するために、キープアライブをアクティブ化するのが最善のオプションだと思ったので、トランスポートで「set_keepalive」を使用して30秒に設定しました。
ssh = paramiko.SSHClient()
ssh.set_missing_hostkey_policy(paramiko.AutoAddPolicy())
ssh.connect(ssh_server, port=ssh_port, username=ssh_user, password=password)
transport = ssh.get_transport()
transport.set_keepalive(30)
sftp = transport.open_sftp_client()
しかし、何も変わりません。この変更による影響はまったくありません。set_keepalive
ここの概念を誤解しているのか、サーバー(アクセス権がない)がキープアライブパケットを無視しているのかはわかりません。
これはこの問題に対処する正しい方法ではありませんか、それとも別のアプローチを試す必要がありますか?ls
セッションを存続させるためにサーバーにコマンドを「手動で」送信するという考えは好きではありません。