Python ftplib no puede obtener el tamaño del archivo antes de descargarlo?

Estoy usando ftplib para transferir archivos. Todo está funcionando muy bien. Ahora estoy tratando de obtener el tamaño del archivo de destino antes de descargar.

  1. Primero, intenté simplemente obtener tamaño con ftp.size (nombre de archivo). El servidor se quejó de que no puedo hacer eso en modo ascii.

  2. Luego intenté configurar el modo binario utilizando ftp.sendcmd (“binary”) y ftp.sendcmd (“bin”). En ambos casos el servidor se quejó de “500 binarios no entendidos”

¿Puede ftplib obtener el tamaño de un archivo antes de descargarlo en esta instancia? No controlo el servidor FTP y no puedo cambiar cómo se comporta.

Gracias

Muy tarde la respuesta, pero aquí está la respuesta correcta. Esto funciona con ProFTPD.

ftp.sendcmd("TYPE i") # Switch to Binary mode ftp.size("/some/file") # Get size of file 

Ftplib puede obtener el tamaño de un archivo antes de descargarlo. Como dice la documentación:

http://FTP.size (nombre de archivo) Solicite el tamaño del archivo llamado nombre de archivo en el servidor. En caso de éxito, el tamaño del archivo se devuelve como un entero, de lo contrario se devuelve Ninguno. Tenga en cuenta que el comando SIZE no está estandarizado, pero muchas implementaciones de servidor comunes lo admiten

Aparentemente su servidor no soporta esta característica.

“El servidor se quejó de que no puedo hacer eso en modo ascii”. – Intente mostrar el código exacto que utilizó Y el texto exacto de la respuesta del servidor. Utilice copiar / pegar, no escriba de la memoria.

¿Tienes acceso a un cliente FTP de línea de comandos? Si no, consigue uno. Úsalo para experimentar con lo que el servidor puede hacer. Un comando del cliente como REMOTEHELP es tu amigo. Ejemplo:

 ftp> remotehelp size 214 Syntax: SIZE  pathname 

Esto indica que el servidor al que estaba conectado admitirá un comando SIZE.