ftplib --- FTP プロトコルクライアント¶
ソースコード: Lib/ftplib.py
このモジュールでは FTP クラスと、それに関連するいくつかの項目を定義しています。 FTP クラスは、FTPプロトコルのクライアント側の機能を備えています。このクラスを使うとFTPのいろいろな機能の自動化、例えば他のFTPサーバのミラーリングといったことを実行するPythonプログラムを書くことができます。また、 urllib.request モジュールもFTPを使うURLを操作するのにこのクラスを使っています。 FTP (File Transfer Protocol)についての詳しい情報はinternet RFC 959 を参照して下さい。
デフォルトのエンコーディングは RFC 2640 に従い UTF-8 です。
利用可能な環境: not WASI.
このモジュールは WebAssembly では動作しないか、利用不可です。詳しくは、WebAssembly プラットフォーム を見てください。
ftplib モジュールを使ったセッションの例を示します。
>>> from ftplib import FTP
>>> ftp = FTP('ftp.us.debian.org') # connect to host, default port
>>> ftp.login() # user anonymous, passwd anonymous@
'230 Login successful.'
>>> ftp.cwd('debian') # change into "debian" directory
'250 Directory successfully changed.'
>>> ftp.retrlines('LIST') # list directory contents
-rw-rw-r-- 1 1176 1176 1063 Jun 15 10:18 README
...
drwxr-sr-x 5 1176 1176 4096 Dec 19 2000 pool
drwxr-sr-x 4 1176 1176 4096 Nov 17 2008 project
drwxr-xr-x 3 1176 1176 4096 Oct 10 2012 tools
'226 Directory send OK.'
>>> with open('README', 'wb') as fp:
... ftp.retrbinary('RETR README', fp.write)
'226 Transfer complete.'
>>> ftp.quit()
'221 Goodbye.'
リファレンス¶
FTP オブジェクト¶
- class ftplib.FTP(host='', user='', passwd='', acct='', timeout=None, source_address=None, *, encoding='utf-8')¶
FTPクラスの新しいインスタンスを返します。- パラメータ:
host (str) -- 接続先のホスト名。 指定した場合、コンストラクタが暗黙に
connect(host)を呼び出します。user (str) -- The username to log in with (default:
'anonymous'). If given,login(host, passwd, acct)is implicitly called by the constructor.passwd (str) -- The password to use when logging in. If not given, and if passwd is the empty string or
"-", a password will be automatically generated.acct (str) -- Account information to be used for the
ACCTFTP command. Few systems implement this. See RFC-959 for more details.timeout (float | None) --
connect()などのブロックする操作のタイムアウトを秒単位で指定します (デフォルト: グローバルなデフォルトのタイムアウト設定)。source_address (tuple | None) -- A 2-tuple
(host, port)for the socket to bind to as its source address before connecting.encoding (str) -- The encoding for directories and filenames (default:
'utf-8').
FTPクラスはwith文をサポートしています。例えば:>>> from ftplib import FTP >>> with FTP("ftp1.at.proftpd.org") as ftp: ... ftp.login() ... ftp.dir() ... '230 Anonymous login ok, restrictions apply.' dr-xr-xr-x 9 ftp ftp 154 May 6 10:43 . dr-xr-xr-x 9 ftp ftp 154 May 6 10:43 .. dr-xr-xr-x 5 ftp ftp 4096 May 6 10:43 CentOS dr-xr-xr-x 3 ftp ftp 18 Jul 10 2008 Fedora >>>
バージョン 3.2 で変更:
with構文のサポートが追加されました。バージョン 3.3 で変更: source_address 引数が追加されました。
バージョン 3.9 で変更: timeout 引数にゼロを指定すると、非ブロッキングソケットの作成を防ぐために
ValueErrorを送出するようになりました。 encoding 引数が追加され、RFC 2640 に従ってデフォルトが Latin-1 から UTF-8 に変更されました。FTPのいくつかのメソッドには、テキストファイル用とバイナリファイル用の 2 種類があります。 メソッド名は、使用するコマンドに、テキスト用ではlines、バイナリ用ではbinaryを付けたものです。FTPインスタンスには以下のメソッドがあります:- set_debuglevel(level)¶
インスタンスのデバッグレベルを
intで設定します。 この値はデバッグ出力の量を制御します。 デバッグレベルは次のとおりです。0(デフォルト): デバッグ出力を行いません。1: 適度な量のデバッグ出力を行います。 通常はリクエストごとに 1 行です。2以上: 最大量のデバッグ出力を行い、制御接続で送受信する各行を記録します。
- connect(host='', port=0, timeout=None, source_address=None)¶
指定したホストとポートに接続します。 この関数はインスタンスごとに 1 回だけ呼び出してください。
FTPインスタンスの作成時に host 引数を指定した場合は呼び出さないでください。 ほかのすべてのFTPメソッドは、接続が成功してから呼び出せます。- パラメータ:
host (str) -- 接続先のホスト。
port (int) -- 接続先の TCP ポート (デフォルト: FTP プロトコルの仕様で定められた
21)。 別のポート番号を指定する必要はほとんどありません。timeout (float | None) -- 接続試行のタイムアウトを秒単位で指定します (デフォルト: グローバルなデフォルトのタイムアウト設定)。
source_address (tuple | None) -- A 2-tuple
(host, port)for the socket to bind to as its source address before connecting.
引数
self,host,portを指定して 監査イベントftplib.connectを送出します。バージョン 3.3 で変更: source_address 引数が追加されました。
- getwelcome()¶
サーバに最初に接続した際に送信される応答中のウェルカムメッセージを返します。(このメッセージには時に、ユーザにとって重要な免責事項や ヘルプ情報が入っています。)
- login(user='anonymous', passwd='', acct='')¶
接続中の FTP サーバーにログインします。 この関数は接続が確立した後、インスタンスごとに 1 回だけ呼び出してください。
FTPインスタンスの作成時に host と user 引数を指定した場合は呼び出さないでください。 ほとんどの FTP コマンドは、クライアントがログインした後でのみ使用できます。- パラメータ:
user (str) -- The username to log in with (default:
'anonymous').passwd (str) -- The password to use when logging in. If not given, and if passwd is the empty string or
"-", a password will be automatically generated.acct (str) -- Account information to be used for the
ACCTFTP command. Few systems implement this. See RFC-959 for more details.
- abort()¶
実行中のファイル転送を中止します。これはいつも機能するわけではありませんが、やってみる価値はあります。
- voidcmd(cmd)¶
単純なコマンド文字列をサーバーに送信し、応答を処理します。 応答コードが成功を表す場合 (200〜299 のコード) は応答文字列を返します。 それ以外の場合は
error_replyを送出します。引数
self,cmdを指定して 監査イベントftplib.sendcmdを送出します。
- retrbinary(cmd, callback, blocksize=8192, rest=None)¶
バイナリ転送モードでファイルを取得します。
- パラメータ:
cmd (str) -- 適切な
RETRコマンド:"RETR filename"。callback (callable) -- 受信したデータのブロックごとに呼び出される、引数を 1 つ取る呼び出し可能オブジェクト。 その引数には
bytesとしてデータが渡されます。blocksize (int) -- 実際の転送用に作成される低水準の
socketオブジェクトから読み取るチャンクの最大サイズ。 callback に渡すデータの最大サイズでもあります。 デフォルトは8192です。rest (int) -- サーバーに送信する
RESTコマンド。transfercmd()メソッドの rest 引数の説明を参照してください。
- retrlines(cmd, callback=None)¶
初期化時に encoding 引数で指定したエンコーディングで、ファイルまたはディレクトリ一覧を取得します。 cmd には適切な
RETRコマンド (retrbinary()を参照)、またはLISTやNLSTなどのコマンドを指定してください (通常は単に文字列'LIST')。LISTはファイルの一覧とそれらのファイルに関する情報を取得します。NLSTはファイル名の一覧を取得します。 各行について callback 関数を呼び出し、末尾の CRLF を除いた行を文字列の引数として渡します。 デフォルトの callback は、その行をsys.stdoutに出力します。
- set_pasv(val)¶
val が真の場合 "パッシブ" モードを有効化し、偽の場合は無効化します。 デフォルトではパッシブモードです。
- storbinary(cmd, fp, blocksize=8192, callback=None, rest=None)¶
バイナリ転送モードでファイルを保存します。
- パラメータ:
cmd (str) -- 適切な
STORコマンド:"STOR filename"。fp (file object) -- バイナリモードで開かれたファイルオブジェクト。
read()メソッドで blocksize サイズのブロックごとに EOF まで読み取り、保存するデータを供給します。blocksize (int) -- 読み取るブロックのサイズ。 デフォルトは
8192です。callback (callable) -- データのブロックを送信するたびに呼び出される、引数を 1 つ取る呼び出し可能オブジェクト。 その引数には
bytesとしてデータが渡されます。rest (int) -- サーバーに送信する
RESTコマンド。transfercmd()メソッドの rest 引数の説明を参照してください。
バージョン 3.2 で変更: rest 引数が追加されました。
- storlines(cmd, fp, callback=None)¶
行モードでファイルを保存します。 cmd には適切な
STORコマンドを指定してください (storbinary()を参照)。 バイナリモードで開かれた file object fp のreadline()メソッドを使い、EOF まで行を読み取って保存するデータを供給します。 callback は引数を 1 つ取る省略可能な呼び出し可能オブジェクトで、各行の送信後に呼び出されます。
- transfercmd(cmd, rest=None)¶
データ接続での転送を開始します。 アクティブモードの場合は
EPRTまたはPORTコマンドと、cmd で指定された転送コマンドを送信して、接続を受け入れます。 パッシブモードの場合はEPSVまたはPASVコマンドを送信してサーバーに接続し、転送コマンドを開始します。 どちらの場合も、その接続のソケットを返します。省略可能な rest を指定すると、その値を引数として
RESTコマンドをサーバーに送信します。 通常、rest は要求するファイル内のバイトオフセットであり、ファイルの先頭部分を飛ばして、指定した位置から送信を再開するようサーバーに指示します。 ただしtransfercmd()メソッドは、初期化時の encoding 引数を使って rest を文字列に変換するだけで、その内容は検査しません。 サーバーがRESTコマンドを認識しない場合はerror_reply例外を送出します。 その場合は rest 引数を指定せずにtransfercmd()を呼び出してください。
- ntransfercmd(cmd, rest=None)¶
transfercmd()と同様ですが、データ接続と転送データの予想サイズのタプルを返します。 予想サイズを計算できない場合、その要素はNoneになります。 cmd と rest の意味はtransfercmd()と同じです。
- mlsd(path='', facts=[])¶
MLSDコマンド (RFC 3659) を使い、標準化された形式でディレクトリを一覧表示します。 path を省略するとカレントディレクトリを対象とします。 facts は必要な情報の種類を表す文字列のリストです (例:["type", "size", "perm"])。pathに見つかったファイルごとに 2 要素のタプルを yield するジェネレータオブジェクトを返します。 最初の要素はファイル名、2 番目の要素はそのファイルの情報を含む辞書です。 この辞書の内容は facts 引数で制限できる場合がありますが、要求したすべての情報をサーバーが返す保証はありません。Added in version 3.3.
- nlst(argument[, ...])¶
NLSTコマンドで返されるファイル名のリストを返します。省略可能な argument は、リストアップするディレクトリです(デフォルトではサーバのカレントディレクトリです)。NLSTコマンドに非標準である複数の引数を渡すことができます。注釈
サーバーがこのコマンドをサポートしている場合は、
mlsd()の方が優れた API を提供します。
- dir(argument[, ...])¶
LISTコマンドが返すディレクトリ一覧を標準出力に表示します。 省略可能な argument は一覧表示するディレクトリです (デフォルトはサーバーのカレントディレクトリ)。 複数の引数を使って、非標準のオプションをLISTコマンドに渡せます。 最後の引数が関数の場合は、retrlines()と同様に callback 関数として使います。 デフォルトではsys.stdoutに表示します。 このメソッドはNoneを返します。注釈
サーバーがこのコマンドをサポートしている場合は、
mlsd()の方が優れた API を提供します。
- rename(fromname, toname)¶
サーバ上のファイルのファイル名 fromname を toname へ変更します。
- delete(filename)¶
サーバーから filename という名前のファイルを削除します。 成功した場合は応答のテキストを返します。 失敗した場合は、権限のエラーなら
error_perm、それ以外のエラーならerror_replyを送出します。
- cwd(pathname)¶
サーバのカレントディレクトリを設定します。
- mkd(pathname)¶
サーバ上に新たにディレクトリを作ります。
- pwd()¶
サーバ上のカレントディレクトリのパスを返します。
- rmd(dirname)¶
サーバ上のディレクトリ dirname を削除します。
- size(filename)¶
サーバ上のファイル filename のサイズを尋ねます。成功したらファイルサイズが整数で返され、そうでないなら
Noneが返されます。SIZEコマンドは標準化されていませんが、多くの普通のサーバで実装されていることに注意して下さい。
FTP_TLS オブジェクト¶
- class ftplib.FTP_TLS(host='', user='', passwd='', acct='', *, context=None, timeout=None, source_address=None, encoding='utf-8')¶
RFC 4217 に従って FTP に TLS サポートを追加する
FTPのサブクラスです。 ポート 21 に接続し、認証前に FTP の制御接続を暗黙に保護します。注釈
データ接続は、利用者が
prot_p()メソッドを呼び出して明示的に保護する必要があります。- パラメータ:
host (str) -- 接続先のホスト名。 指定した場合、コンストラクタが暗黙に
connect(host)を呼び出します。user (str) -- The username to log in with (default:
'anonymous'). If given,login(host, passwd, acct)is implicitly called by the constructor.passwd (str) -- The password to use when logging in. If not given, and if passwd is the empty string or
"-", a password will be automatically generated.acct (str) -- Account information to be used for the
ACCTFTP command. Few systems implement this. See RFC-959 for more details.context (
ssl.SSLContext) -- SSL の設定オプション、証明書、秘密鍵を、長期間使用できる単一の構造にまとめる SSL コンテキストオブジェクトです。 推奨される使用方法については セキュリティで考慮すべき点 を参照してください。timeout (float | None) --
connect()などのブロックする操作のタイムアウトを秒単位で指定します (デフォルト: グローバルなデフォルトのタイムアウト設定)。source_address (tuple | None) -- A 2-tuple
(host, port)for the socket to bind to as its source address before connecting.encoding (str) -- The encoding for directories and filenames (default:
'utf-8').
Added in version 3.2.
バージョン 3.3 で変更: source_address 引数が追加されました。
バージョン 3.4 で変更: このクラスは
ssl.SSLContext.check_hostnameによるホスト名の検証と Server Name Indication (ssl.HAS_SNIを参照) をサポートするようになりました。バージョン 3.9 で変更: timeout 引数にゼロを指定すると、非ブロッキングソケットの作成を防ぐために
ValueErrorを送出するようになりました。 encoding 引数が追加され、RFC 2640 に従ってデフォルトが Latin-1 から UTF-8 に変更されました。バージョン 3.12 で変更: 非推奨の keyfile と certfile 引数を削除しました。
FTP_TLSクラスを使ったセッションの例を示します。>>> ftps = FTP_TLS('ftp.pureftpd.org') >>> ftps.login() '230 Anonymous user logged in' >>> ftps.prot_p() '200 Data protection level set to "private"' >>> ftps.nlst() ['6jack', 'OpenBSD', 'antilink', 'blogbench', 'bsdcam', 'clockspeed', 'djbdns-jedi', 'docs', 'eaccelerator-jedi', 'favicon.ico', 'francotone', 'fugu', 'ignore', 'libpuzzle', 'metalog', 'minidentd', 'misc', 'mysql-udf-global-user-variables', 'php-jenkins-hash', 'php-skein-hash', 'php-webdav', 'phpaudit', 'phpbench', 'pincaster', 'ping', 'posto', 'pub', 'public', 'public_keys', 'pure-ftpd', 'qscan', 'qtc', 'sharedance', 'skycache', 'sound', 'tmp', 'ucarp']
FTP_TLSクラスはFTPを継承し、次のメソッドと属性を追加で定義します。- auth()¶
TLS を使って安全な制御接続を確立します。
バージョン 3.4 で変更: このメソッドは
ssl.SSLContext.check_hostnameによるホスト名の検証と Server Name Indication (ssl.HAS_SNIを参照) をサポートするようになりました。
- ccc()¶
制御チャネルを平文に戻します。 暗号化されていない FTP の NAT を処理できるファイアウォールで、固定ポートを開かずにその機能を利用する場合に役立ちます。
Added in version 3.3.
- prot_p()¶
TLS を使って安全なデータ接続を確立します。
- prot_c()¶
平文データ接続をセットアップします。
モジュール変数¶
- exception ftplib.error_reply¶
サーバから想定外の応答があったときに送出される例外。
- exception ftplib.error_temp¶
一時的エラーを表すエラーコード(400--499の範囲の応答コード)を受け取った時に発生する例外。
- exception ftplib.error_perm¶
永久エラーを表すエラーコード(500--599の範囲の応答コード)を受け取った時に発生する例外。
- exception ftplib.error_proto¶
File Transfer Protocol の応答仕様に適合しない、すなわち1--5の数字で始まらない応答コードをサーバから受け取った時に発生する例外。
- ftplib.all_errors¶
FTPインスタンスのメソッドが FTP 接続の問題によって送出する可能性のある例外を、すべてまとめたタプルです。 呼び出し側のプログラミング上の誤りによる例外は含みません。 上記の 4 つの例外に加え、OSErrorとEOFErrorも含まれます。
参考
netrcモジュール.netrcファイルフォーマットのパーザ。.netrcファイルは、 FTPクライアントがユーザにプロンプトを出す前に、ユーザ認証情報をロードするのによく使われます。