2012-09-06 20 views
6

में sftp के माध्यम से कनेक्ट करने के बाद निर्देशिका में सभी फ़ोल्डरों और फ़ाइलों को कैसे सूचीबद्ध करें हाय मैं अजगर का उपयोग कर रहा हूं और sftp से कनेक्ट करने का प्रयास कर रहा हूं और वहां से एक XML फ़ाइल पुनर्प्राप्त करना चाहता हूं और नीचे मेरी स्थानीय प्रणाली में स्थानांतरित करने की आवश्यकता है कोड हैपाइथन

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 

यहां कनेक्शन सफलता भरा हुआ है और अब मैं सभी फ़ोल्डर और सभी फ़ाइलों को देख सकते हैं और वहाँ से xml फ़ाइल पुन: प्राप्त करने के लिए आवश्यक फ़ोल्डर में डालना होगा करना चाहते हैं।

अंततः मेरा इरादा sftp सर्वर से कनेक्ट करने के बाद सभी फ़ोल्डर्स और फ़ाइलों को देखना है। जिसके माध्यम से उपरोक्त कोड में मैं ftp.listdir() का इस्तेमाल किया था मैं जैसे

नीचे
['.bash_logout', '.bash_profile', '.bashrc', '.mozilla', 'testfile_248.xml'] 

मुझे पता है कि इनमें से केवल फ़ाइलें मौजूद हैं कि क्या चाहते हैं कुछ चीज के रूप में उत्पादन मिल गया?

और ऊपर दिए गए आदेश को फ़ोल्डरों को भी देखने का अधिकार है?

क्या सभी फ़ोल्डर और फ़ाइलें

उत्तर

8

एक त्वरित समाधान ftp.listdir() में प्रत्येक वस्तु के lstat के उत्पादन में जांच करने के लिए है देखने के लिए आदेश है।

यहां बताया गया है कि आप सभी निर्देशिकाओं को कैसे सूचीबद्ध कर सकते हैं।

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

की 'SFTPAttributes' एक भयानक, भयानक हैक है stringification व्यवहार पर निर्भर:

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

फ़ाइलें विपरीत खोज कर रहे हैं। आप इसे ठीक से क्यों नहीं करते हैं, और 'stat.S_ISDIR (lstatout.st_mode) 'का उपयोग करें? –

+0

@FakeName मैं ऐसा करने की कोशिश कर रहा हूं और मुझे आपकी टिप्पणी समझ में नहीं आ रही है। –

+0

@PANDAStack - 'ftp.lstat (i)' वर्ग ['SFTPAttributes'] का एक उदाहरण देता है (https://github.com/paramiko/paramiko/blob/6978c7a0b8faa683b119de3a0c096be31ac4fdc9/paramiko/sftp_attr.py#L25)। इस जवाब का यह तरीका इस बात पर निर्भर करता है कि लाइब्रेरी ने 'SFTPAttributes' * look * के' __repr__' को कैसे चुना है, जो प्रोग्रामर डिबगिंग के लिए ** पूरी तरह से ** इंटरफ़ेस बनाया गया है, और शायद परीक्षण या गारंटी नहीं है पैच संस्करण संख्याओं में भी स्थिर रहना। –