2013-01-18 22 views
5

का उपयोग कर रिमोट एसएसएच सर्वर पर फ़ाइल अस्तित्व की जांच कर रहा है मेरे पास दो सर्वर ए और बी हैं। मुझे लगता है कि एक छवि फ़ाइल, सर्वर ए से दूसरे सर्वर बी तक कहें, लेकिन सर्वर ए से पहले फ़ाइल पर मैं जांचना चाहता हूं कि सर्वर बी में एक समान फ़ाइल मौजूद है या नहीं। मैं os.path.exists() का उपयोग करने का प्रयास करता हूं और यह काम नहीं करता है।पायथन

print os.path.exists('[email protected]:b.jpeg') 

परिणाम एक झूठी वापसी भी मैं मुझे यकीन है कि क्या यह मेरी सिंटेक्स त्रुटि है या इस समस्या का किसी भी बेहतर समाधान है नहीं कर रहा हूँ सर्वर बी पर एक सटीक फ़ाइल डाल दिया है। धन्यवाद

+0

"सर्वर" से आपका क्या मतलब है? क्या यह एक एसएसएच सर्वर है? मुझे पूरा यकीन है कि 'os.path' मॉड्यूल किसी भी नेटवर्क प्रोटोकॉल को समझ में नहीं आता है। बेशक, यदि नेटवर्क पथ कहीं भी आपके फाइल सिस्टम में घुड़सवार है तो आप इसे अपने पथ के माध्यम से एक्सेस कर सकते हैं। – DaveP

+0

हाँ यह एक एसएसएच सर्वर –

उत्तर

16

os.path फ़ंक्शंस केवल उसी कंप्यूटर पर फ़ाइलों पर काम करते हैं। वे पथ पर संचालित होते हैं, और [email protected]:b.jpeg पथ नहीं है।

इसे पूरा करने के लिए, आपको दूरस्थ रूप से एक स्क्रिप्ट निष्पादित करने की आवश्यकता होगी। कुछ इस तरह काम करेंगे, आमतौर पर: यदि एक फ़ाइल के साथ एक और सर्वर पर मौजूद

def exists_remote(host, path): 
    """Test if a file exists at path on a host accessible with SSH.""" 
    status = subprocess.call(
     ['ssh', host, 'test -f {}'.format(pipes.quote(path))]) 
    if status == 0: 
     return True 
    if status == 1: 
     return False 
    raise Exception('SSH failed') 

तो तुम मिल सकता है:

if exists_remote('[email protected]', 'b.jpeg'): 
    # it exists... 

ध्यान दें कि यह शायद हो जाएगा अविश्वसनीय रूप से धीमी गति से, संभावना भी अधिक से अधिक 100 एमएस

+0

धन्यवाद। यह बहुत अच्छा काम करता है! –

+3

'वापसी subprocess.call (['ssh', मेजबान, 'test -e' + pipes.quote (पथ)]) == 0' – jfs