11

ftplib を使用してファイル リストを取得し、前回のチェック以降の新しいファイルをダウンロードしようとしています。これまでに実行しようとしているコードは次のとおりです。

#!/usr/bin/env python
from ftplib import FTP
import sys

host = 'ftp.***.com'
user = '***'
passwd = '***'

try:
    ftp = FTP(host)
    ftp.login(user, passwd)
except:
    print 'Error connecting to FTP server'
    sys.exit()

try:
    ftp.retrlines('LIST')
except:
    print 'Error fetching file listing'
    ftp.quit()
    sys.exit()

ftp.quit() 

これを実行するたびに、リストを取得しようとするとタイムアウトになります。何か案は?

4

2 に答える 2

17

パッシブ モードが何らかの理由で失敗する場合は、次を試してください。

ftp.set_pasv(False)

アクティブモードを使用します。

于 2012-03-22T07:19:39.207 に答える
13

最も可能性が高いのは、アクティブ モードとパッシブ モードの間の競合です。次のいずれかに該当することを確認します。

  1. サーバーはPASVモードをサポートしており、クライアントはPASVモードを設定しています
  2. サーバーがパッシブ モードをサポートしていない場合は、ファイアウォールがアクティブ モードの FTP 転送をサポートしている必要があります。

EDIT:ドキュメントを見て、Python 2.1以降ではデフォルトがパッシブモードであることがわかりました。どのサーバーと話しているのですか? また、パッシブ モードをサポートしているかどうかはわかりますか?

アクティブ モード (非 PASV) では、クライアントはサーバーにそのポートで DATA 接続を開始するように指示する PORT コマンドを送信します。これには、着信 DATA 接続を転送できるように、ファイアウォールが PORT コマンドを認識している必要があります。ファイアウォールはほとんどありません。これをサポートします。パッシブ モードでは、クライアントが DATA 接続を開き、サーバーがそれを使用します (サーバーはデータ接続を開く際に「パッシブ」になります)。

パッシブ モードを使用していない場合に備えて、 aftp.set_pasv(True)を実行して違いがあるかどうかを確認してください。

于 2010-08-10T18:27:03.113 に答える