2012-09-06 8 views
6

Ciao sto usando python e sto provando a connettermi a sftp e voglio recuperare un file xml da lì e devo metterlo nel mio sistema locale, sotto è il codiceCome elencare tutte le cartelle ei file nella directory dopo aver effettuato la connessione tramite sftp in 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 

qui connessione è successo pieno e ora voglio vedere tutte le cartelle e tutti i file e la necessità di entrare in a cartella richiesta per il recupero di file XML da lì.

Infine, il mio obiettivo è visualizzare tutte le cartelle e i file dopo essersi connessi al server sftp. Nel codice precedente avevo usato ftp.listdir() attraverso il quale ho ottenuto output come qualche cosa come di seguito

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

Voglio sapere se questi sono gli unici file presenti?

E il comando che ho usato sopra è giusto per visualizzare anche le cartelle?

Qual è il comando per visualizzare tutte le cartelle ei file

risposta

8

Una soluzione rapida è quella di esaminare l'output di lstat di ogni oggetto in ftp.listdir().

Ecco come è possibile elencare tutte le directory.

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

file sono la ricerca opposto:

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

Basandosi sul comportamento in stringa di 'SFTPAttributes' è un orribile, orribile hack. Perché non lo fai correttamente, e usi 'stat.S_ISDIR (lstatout.st_mode)'? –

+0

@FakeName Sto provando a farlo e non capisco il tuo commento. –

+0

@PANDAStack - 'ftp.lstat (i)' restituisce un'istanza della classe ['SFTPAttributes'] (https://github.com/paramiko/paramiko/blob/6978c7a0b8faa683b119de3a0c096be31ac4fdc9/paramiko/sftp_attr.py#L25). Il modo in cui questa risposta fa è dipendere da come la libreria ha scelto di avere il '__repr__' di' SFTPAttributes' * look *, che è un'interfaccia progettata ** interamente ** per il debug del programmatore, e probabilmente non è testata o garantita essere costante, anche attraverso i numeri di versione delle patch. –