2012-09-06 24 views
6

Hola, estoy usando python y tratando de conectarme a sftp y quiero recuperar un archivo xml desde allí y necesito ubicarlo en mi sistema local, a continuación es el códigoCómo enumerar todas las carpetas y archivos en el directorio después de conectar a través de sftp en python

import paramiko 

sftpURL = 'sftp.somewebsite.com' 
sftpUser = 'user_name' 
sftpPass = 'password' 

ssh = paramiko.SSHClient() 
# automatically add keys without requiring human intervention 
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 

ssh.connect(sftpURL, username=sftpUser, password=sftpPass) 

ftp = ssh.open_sftp() 
files = ftp.listdir() 
print files 

aquí conexión es pleno éxito y ahora quiero ver todas las carpetas y todos los archivos y la necesidad de introducir en la carpeta requerida para obtener un archivo XML a partir de ahí.

Finalmente mi intención es ver todas las carpetas y archivos después de conectarme al servidor sftp. En el código anterior que había utilizado ftp.listdir() a través del cual tengo salida como algo, como a continuación

['.bash_logout', '.bash_profile', '.bashrc', '.mozilla', 'testfile_248.xml'] 

Quiero saber si estos son los únicos archivos presentes?

¿Y el comando que utilicé arriba es correcto para ver las carpetas también?

¿Cuál es el comando para ver todas las carpetas y archivos

Respuesta

8

Una solución rápida es examinar la salida de lstat de cada objeto en ftp.listdir().

Así es como puede listar todos los directorios.

>>> for i in ftp.listdir(): 
...  lstatout=str(ftp.lstat(i)).split()[0] 
...  if 'd' in lstatout: print i, 'is a directory' 
... 

archivos son la búsqueda contrario:

>>> for i in ftp.listdir(): 
...  lstatout=str(ftp.lstat(i)).split()[0] 
...  if 'd' not in lstatout: print i, 'is a file' 
... 
+6

Basándose en el comportamiento de stringification 'SFTPAttributes' es un horrible, horrible truco. ¿Por qué no lo haces correctamente y usas 'stat.S_ISDIR (lstatout.st_mode)'? –

+0

@FakeName Estoy tratando de hacer esto y no entiendo tu comentario. –

+0

@PANDAStack - 'ftp.lstat (i)' devuelve una instancia de la clase ['SFTPAttributes'] (https://github.com/paramiko/paramiko/blob/6978c7a0b8faa683b119de3a0c096be31ac4fdc9/paramiko/sftp_attr.py#L25). La forma en que esta respuesta hace esto es depender de cómo la biblioteca ha elegido tener el '__repr__' de' SFTPAttributes' * look *, que es una interfaz diseñada ** completamente ** para la depuración del programador, y probablemente no haya sido probada o garantizada para ser constante, incluso a través de números de versión de parche. –

Cuestiones relacionadas