Código fuente:Lib / ftplib.py

Este módulo define la clase FTP y algunos artículos relacionados. los FTP class implementa el lado del cliente del protocolo FTP. Puede usar esto para escribir programas Python que realicen una variedad de trabajos FTP automatizados, como duplicar otros servidores FTP. También es utilizado por el módulo urllib.request para manejar URL que utilizan FTP. Para obtener más información sobre FTP (Protocolo de transferencia de archivos), consulte Internet. RFC 959.

La codificación predeterminada es UTF-8, siguiendo RFC 2640.

Aquí hay una sesión de muestra usando el ftplib módulo:

>>>from ftplib import FTP
>>> ftp = FTP('ftp.us.debian.org')# connect to host, default port>>> ftp.login()# user anonymous, passwd [email protected]'230 Login successful.'>>> ftp.cwd('debian')# change into "debian" directory>>> ftp.retrlines('LIST')# list directory contents-rw-rw-r--1117611761063 Jun 1510:18 README
...
drwxr-sr-x    5117611764096 Dec 192000 pool
drwxr-sr-x    4117611764096 Nov 172008 project
drwxr-xr-x    3117611764096 Oct 102012 tools
'226 Directory send OK.'>>>withopen('README','wb')as fp:>>>     ftp.retrbinary('RETR README', fp.write)'226 Transfer complete.'>>> ftp.quit()

El módulo define los siguientes elementos:

class ftplib.FTP(host='', user='', passwd='', acct='', timeout=None, source_address=None, *, encoding='utf-8')

Devuelve una nueva instancia del FTP clase. Cuando anfitrión se da, la llamada al método connect(host) está hecho. Cuando usuario se da, además la llamada al método login(user, passwd, acct) se hace (donde passwd y cuenta predeterminado a la cadena vacía cuando no se proporciona). El opcional se acabó el tiempo El parámetro especifica un tiempo de espera en segundos para bloquear operaciones como el intento de conexión (si no se especifica, se utilizará la configuración de tiempo de espera global predeterminada). Dirección de la fuente es una tupla de 2 (host, port) para que el socket se vincule como su dirección de origen antes de conectarse. los codificacion El parámetro especifica la codificación de directorios y nombres de archivos.

los FTP la clase apoya el with declaración, por ejemplo:

>>>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  610:43.
dr-xr-xr-x   9 ftp      ftp           154 May  610:43..
dr-xr-xr-x   5 ftp      ftp          4096 May  610:43 CentOS
dr-xr-xr-x   3 ftp      ftp            18 Jul 102008 Fedora
>>>

Modificado en la versión 3.2: Soporte para el with se agregó una declaración.

Modificado en la versión 3.3: Dirección de la fuente se agregó el parámetro.

Modificado en la versión 3.9: Si el se acabó el tiempo el parámetro se establece en cero, generará un ValueError para evitar la creación de un enchufe sin bloqueo. los codificacion se agregó el parámetro, y el predeterminado se cambió de Latin-1 a UTF-8 para seguir RFC 2640.

class ftplib.FTP_TLS(host='', user='', passwd='', acct='', keyfile=None, certfile=None, context=None, timeout=None, source_address=None, *, encoding='utf-8')

A FTP subclase que agrega soporte TLS a FTP como se describe en RFC 4217. Conéctese como de costumbre al puerto 21 asegurando implícitamente la conexión de control FTP antes de autenticarse. Asegurar la conexión de datos requiere que el usuario la solicite explícitamente llamando al prot_p() método. contexto es un ssl.SSLContext objeto que permite agrupar opciones de configuración SSL, certificados y claves privadas en una única estructura (potencialmente duradera). Por favor lee Consideraciones de Seguridad para conocer las mejores prácticas.

archivo de clave y certfile son una alternativa heredada a contexto – Pueden apuntar a archivos de cadena de certificado y clave privada con formato PEM (respectivamente) para la conexión SSL.

Nuevo en la versión 3.2.

Modificado en la versión 3.3: Dirección de la fuente se agregó el parámetro.

Modificado en la versión 3.4: La clase ahora admite la verificación del nombre de host con ssl.SSLContext.check_hostname y Indicación del nombre del servidor (ver ssl.HAS_SNI).

En desuso desde la versión 3.6: archivo de clave y certfile están en desuso a favor de contexto. Por favor use ssl.SSLContext.load_cert_chain() en su lugar, o dejar ssl.create_default_context() seleccione los certificados CA de confianza del sistema para usted.

Modificado en la versión 3.9: Si el se acabó el tiempo el parámetro se establece en cero, generará un ValueError para evitar la creación de un enchufe sin bloqueo. los codificacion se agregó el parámetro, y el predeterminado se cambió de Latin-1 a UTF-8 para seguir RFC 2640.

Aquí hay una sesión de muestra usando el FTP_TLS clase:

>>> 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']
exception ftplib.error_reply

Se genera una excepción cuando se recibe una respuesta inesperada del servidor.

exception ftplib.error_temp

Se genera una excepción cuando se recibe un código de error que significa un error temporal (códigos de respuesta en el rango 400–499).

exception ftplib.error_perm

Se genera una excepción cuando se recibe un código de error que significa un error permanente (códigos de respuesta en el rango 500–599).

exception ftplib.error_proto

Se genera una excepción cuando se recibe una respuesta del servidor que no se ajusta a las especificaciones de respuesta del Protocolo de transferencia de archivos, es decir, comienza con un dígito en el rango 1–5.

ftplib.all_errors

El conjunto de todas las excepciones (como una tupla) que los métodos de FTP pueden surgir instancias como resultado de problemas con la conexión FTP (a diferencia de los errores de programación cometidos por la persona que llama). Este conjunto incluye las cuatro excepciones enumeradas anteriormente, así como OSError y EOFError.

Ver también

Modulenetrc

Analizador para el .netrc formato de archivo. El archivo .netrc Los clientes FTP suelen utilizarla para cargar la información de autenticación del usuario antes de preguntarle al usuario.

Objetos FTP

Hay varios métodos disponibles en dos versiones: uno para manejar archivos de texto y otro para archivos binarios. Estos se nombran por el comando que se utiliza seguido de lines para la versión de texto o binary para la versión binaria.

FTP instancias tienen los siguientes métodos:

FTP.set_debuglevel(level)

Establece el nivel de depuración de la instancia. Esto controla la cantidad de salida de depuración impresa. El valor por defecto, 0, no produce salida de depuración. Un valor de 1 produce una cantidad moderada de salida de depuración, generalmente una sola línea por solicitud. Un valor de 2 o superior produce la cantidad máxima de salida de depuración, registrando cada línea enviada y recibida en la conexión de control.

FTP.connect(host='', port=0, timeout=None, source_address=None)

Conéctese al host y al puerto indicados. El número de puerto predeterminado es 21, según lo especificado por la especificación del protocolo FTP. Rara vez es necesario especificar un número de puerto diferente. Esta función debe llamarse solo una vez para cada instancia; no se debe llamar en absoluto si se proporcionó un host cuando se creó la instancia. Todos los demás métodos solo se pueden utilizar después de que se haya realizado una conexión. El opcional se acabó el tiempo El parámetro especifica un tiempo de espera en segundos para el intento de conexión. Si no se acabó el tiempo se pasa, se utilizará la configuración de tiempo de espera predeterminada global. Dirección de la fuente es una tupla de 2 (host, port) para que el socket se vincule como su dirección de origen antes de conectarse.

Plantea un evento de auditoríaftplib.connect con argumentos self, host, port.

Modificado en la versión 3.3: Dirección de la fuente se agregó el parámetro.

FTP.getwelcome()

Devuelve el mensaje de bienvenida enviado por el servidor en respuesta a la conexión inicial. (Este mensaje a veces contiene exenciones de responsabilidad o información de ayuda que puede ser relevante para el usuario).

FTP.login(user='anonymous', passwd='', acct='')

Inicie sesión como dado usuario. los passwd y cuenta los parámetros son opcionales y predeterminados para la cadena vacía. Si no usuario se especifica, por defecto es 'anonymous'. Si usuario es 'anonymous', el valor por defecto passwd es '[email protected]'. Esta función debe llamarse solo una vez para cada instancia, después de que se haya establecido una conexión; no se debe llamar en absoluto si se proporcionaron un host y un usuario cuando se creó la instancia. La mayoría de los comandos FTP solo se permiten después de que el cliente haya iniciado sesión. cuenta el parámetro proporciona “información contable”; pocos sistemas implementan esto.

FTP.abort()

Abortar una transferencia de archivos en curso. Usar esto no siempre funciona, pero vale la pena intentarlo.

FTP.sendcmd(cmd)

Envíe una cadena de comando simple al servidor y devuelva la cadena de respuesta.

Plantea un evento de auditoríaftplib.sendcmd con argumentos self, cmd.

FTP.voidcmd(cmd)

Envíe una cadena de comando simple al servidor y maneje la respuesta. No devuelve nada si se recibe un código de respuesta correspondiente al éxito (códigos en el rango 200-299). Aumentar error_reply de lo contrario.

Plantea un evento de auditoríaftplib.sendcmd con argumentos self, cmd.

FTP.retrbinary(cmd, callback, blocksize=8192, rest=None)

Recupere un archivo en modo de transferencia binaria. cmd debe ser un apropiado RETR mando: 'RETR filename'. los llamar de vuelta Se llama a la función para cada bloque de datos recibido, con un argumento de un solo byte que proporciona el bloque de datos. El opcional tamaño de bloque El argumento especifica el tamaño máximo de fragmento para leer en el objeto de socket de bajo nivel creado para realizar la transferencia real (que también será el tamaño más grande de los bloques de datos pasados ​​a llamar de vuelta). Se elige un valor predeterminado razonable. descansar significa lo mismo que en el transfercmd() método.

FTP.retrlines(cmd, callback=None)

Recuperar una lista de archivos o directorios con la codificación especificada por el codificacion parámetro en la inicialización. cmd debe ser un apropiado RETR comando (ver retrbinary()) o un comando como LIST o NLST (generalmente solo la cuerda 'LIST'). LIST recupera una lista de archivos e información sobre esos archivos. NLST recupera una lista de nombres de archivos. los llamar de vuelta Se llama a la función para cada línea con un argumento de cadena que contiene la línea con el CRLF final eliminado. El valor por defecto llamar de vuelta imprime la línea a sys.stdout.

FTP.set_pasv(val)

Habilite el modo “pasivo” si val es verdadero; de lo contrario, desactive el modo pasivo. El modo pasivo está activado de forma predeterminada.

FTP.storbinary(cmd, fp, blocksize=8192, callback=None, rest=None)

Almacene un archivo en modo de transferencia binaria. cmd debe ser un apropiado STOR mando: "STOR filename". fp es un objeto de archivo (abierto en modo binario) que se lee hasta EOF usando su read() método en bloques de tamaño tamaño de bloque para proporcionar los datos que se almacenarán. los tamaño de bloque El argumento predeterminado es 8192. llamar de vuelta es un único parámetro opcional invocable que se llama en cada bloque de datos después de su envío. descansar significa lo mismo que en el transfercmd() método.

Modificado en la versión 3.2: descansar parámetro agregado.

FTP.storlines(cmd, fp, callback=None)

Almacene un archivo en modo de línea. cmd debe ser un apropiado STOR comando (ver storbinary()). Las líneas se leen hasta EOF del objeto de archivofp (abierto en modo binario) usando su readline() método para proporcionar los datos que se almacenarán. llamar de vuelta es un único parámetro opcional invocable que se llama en cada línea después de su envío.

FTP.transfercmd(cmd, rest=None)

Inicie una transferencia a través de la conexión de datos. Si la transferencia está activa, envíe un EPRT o PORT comando y el comando de transferencia especificado por cmdy acepta la conexión. Si el servidor es pasivo, envíe un EPSV o PASV comando, conéctese a él e inicie el comando de transferencia. De cualquier manera, devuelva el zócalo para la conexión.

Si es opcional descansar se da, un REST El comando se envía al servidor, pasando descansar como argumento. descansar suele ser un desplazamiento de bytes en el archivo solicitado, que le indica al servidor que reinicie el envío de los bytes del archivo en el desplazamiento solicitado, omitiendo los bytes iniciales. Sin embargo, tenga en cuenta que el transfercmd() el método convierte descansar a una cuerda con el codificacion parámetro especificado en la inicialización, pero no se realiza ninguna verificación en el contenido de la cadena. Si el servidor no reconoce el REST comando, un error_reply se planteará una excepción. Si esto sucede, simplemente llame transfercmd() sin un descansar argumento.

FTP.ntransfercmd(cmd, rest=None)

Igual que transfercmd(), pero devuelve una tupla de la conexión de datos y el tamaño esperado de los datos. Si no se pudo calcular el tamaño esperado, None será devuelto como el tamaño esperado. cmd y descansar significa lo mismo que en transfercmd().

FTP.mlsd(path="", facts=[])

Enumere un directorio en un formato estandarizado usando MLSD comandoRFC 3659). Si sendero se omite se asume el directorio actual. hechos es una lista de cadenas que representan el tipo de información deseada (p. ej. ["type", "size", "perm"]). Devuelve un objeto generador que produce una tupla de dos elementos por cada archivo encontrado en la ruta. El primer elemento es el nombre del archivo, el segundo es un diccionario que contiene datos sobre el nombre del archivo. El contenido de este diccionario puede estar limitado por hechos argumento, pero no se garantiza que el servidor devuelva todos los hechos solicitados.

Nuevo en la versión 3.3.

FTP.nlst(argument[, ...])

Devuelve una lista de nombres de archivos tal como los devuelve el NLST mando. El opcional argumento es un directorio para listar (el predeterminado es el directorio del servidor actual). Se pueden utilizar varios argumentos para pasar opciones no estándar al NLST mando.

Nota

Si su servidor admite el comando, mlsd() ofrece una mejor API.

FTP.dir(argument[, ...])

Producir un listado de directorio como lo devuelve el LIST comando, imprimiéndolo en salida estándar. El opcional argumento es un directorio para listar (el predeterminado es el directorio del servidor actual). Se pueden utilizar varios argumentos para pasar opciones no estándar al LIST mando. Si el último argumento es una función, se utiliza como llamar de vuelta funcionar como para retrlines(); las impresiones predeterminadas a sys.stdout. Este método devuelve None.

Nota

Si su servidor admite el comando, mlsd() ofrece una mejor API.

FTP.rename(fromname, toname)

Renombrar archivo fromname en el servidor para nombrar.

FTP.delete(filename)

Eliminar el archivo llamado nombre del archivo desde el servidor. Si tiene éxito, devuelve el texto de la respuesta; de lo contrario, aumenta error_perm sobre errores de permiso o error_reply sobre otros errores.

FTP.cwd(pathname)

Configure el directorio actual en el servidor.

FTP.mkd(pathname)

Cree un nuevo directorio en el servidor.

FTP.pwd()

Devuelve el nombre de la ruta del directorio actual en el servidor.

FTP.rmd(dirname)

Eliminar el directorio llamado dirname en el servidor.

FTP.size(filename)

Solicite el tamaño del archivo nombrado nombre del archivo en el servidor. En caso de éxito, el tamaño del archivo se devuelve como un número entero, de lo contrario None es regresado. Tenga en cuenta que el SIZE El comando no está estandarizado, pero es compatible con muchas implementaciones de servidor comunes.

FTP.quit()

Enviar una QUIT comando al servidor y cierre la conexión. Esta es la forma “educada” de cerrar una conexión, pero puede generar una excepción si el servidor responde con un error al QUIT mando. Esto implica una llamada a la close() método que hace que el FTP instancia inútil para llamadas posteriores (ver más abajo).

FTP.close()

Cierre la conexión unilateralmente. Esto no debe aplicarse a una conexión ya cerrada, como después de una llamada exitosa a quit(). Después de esta llamada al FTP La instancia no debe usarse más (después de una llamada a close() o quit() no puede reabrir la conexión emitiendo otro login() método).

Objetos FTP_TLS

FTP_TLS la clase hereda de FTP, definiendo estos objetos adicionales:

FTP_TLS.ssl_version

La versión de SSL a usar (por defecto es ssl.PROTOCOL_SSLv23).

FTP_TLS.auth()

Configure una conexión de control segura mediante TLS o SSL, según lo que se especifique en la ssl_version atributo.

Modificado en la versión 3.4: El método ahora admite la verificación del nombre de host con ssl.SSLContext.check_hostname y Indicación del nombre del servidor (ver ssl.HAS_SNI).

FTP_TLS.ccc()

Revertir el canal de control a texto sin formato. Esto puede resultar útil para aprovechar los cortafuegos que saben cómo manejar NAT con FTP no seguro sin abrir puertos fijos.

Nuevo en la versión 3.3.

FTP_TLS.prot_p()

Configure una conexión de datos segura.

FTP_TLS.prot_c()

Configure la conexión de datos de texto sin cifrar.