2009-06-03 9 views
28

का उपयोग कर दूरस्थ रूप से प्रक्रिया को निष्पादित करने के लिए मैं पाइथन का उपयोग करके रिमोट सर्वर पर भी कनेक्ट करना और प्रक्रिया को निष्पादित करना चाहता हूं। मैं प्रक्रिया के रिटर्न कोड और stderr (यदि कोई हो) प्राप्त करने में सक्षम होना चाहता हूँ। क्या किसी ने कभी ऐसा कुछ किया है। मैंने इसे एसएसएच के साथ किया है, लेकिन मैं इसे पायथन लिपि से करना चाहता हूं।पाइथन

चीयर्स।

+1

डुप्लिकेट: http://stackoverflow.com/questions/536370/execute -र्बिटेरथ-पायथन-कोड-दूरस्थ रूप से-कर-किया-किया जा सकता है –

+0

उदाहरण: http://stromberg.dnsalias.org/~strombrg/looper/ यह अधिग्रहण के कारण माइक्रोसॉफ्ट द्वारा लाइसेंस प्राप्त ओपनसोर्स है। यह लिनक्स पर अच्छी तरह से काम करता है। – user1277476

उत्तर

23

ठीक है, तुम अजगर से ssh कॉल कर सकते हैं ...

import subprocess 
ret = subprocess.call(["ssh", "[email protected]", "program"]); 

# or, with stderr: 
prog = subprocess.Popen(["ssh", "[email protected]", "program"], stderr=subprocess.PIPE) 
errdata = prog.communicate()[1] 
+7

आपको यह सुनिश्चित करने की आवश्यकता होगी कि आपके पास दूरस्थ होस्ट और उचित कुंजी के लिए कुंजी-आधारित प्रमाणीकरण है। अन्यथा, आपको पासवर्ड के लिए संकेत मिलेगा। – slacy

+0

अच्छा, जाहिर है, मैं पुराना हूं - os.spawnlp की सिफारिश करने जा रहा था, लेकिन मुझे लगता है कि इसे बदलने के लिए सबप्रोसेस मॉड्यूल पेश किया गया था। – klochner

+0

धन्यवाद दोस्त। जब आप ssh पर कमांड निष्पादित करते हैं तो रिटर्न कोड और stderr exec'd कमांड का होता है, अगर ssh में कोई समस्या नहीं है। मैं वहां से टैप करने के लिए पॉपन क्लास और संवाद() विधि कर सकता हूं। – stinkypyper

40

ssh module called paramiko जो बजाय subprocess का उपयोग कर के इस उद्देश्य के लिए बनाया गया था का उपयोग करें।

from paramiko import SSHClient 
client = SSHClient() 
client.load_system_host_keys() 
client.connect("hostname", username="user") 
stdin, stdout, stderr = client.exec_command('program') 
print "stderr: ", stderr.readlines() 
print "pwd: ", stdout.readlines() 

अद्यतन:: यहाँ नीचे एक उदाहरण दिया ssh मॉड्यूल का उपयोग करने के लिए इस्तेमाल उदाहरण हैं, लेकिन वह अब नहीं रहेगी तथा paramiko अप-टू-डेट मॉड्यूल है कि अजगर में ssh सुविधा प्रदान करता है है।

3

हो सकता है कि अगर आप नट और बोल्ट रैप करने के लिए करना चाहते हैं ssh आप इस्तेमाल कर सकते हैं Fabric इस पुस्तकालय तैनाती और सर्वर प्रबंधन की दिशा में सक्षम है कहता है, लेकिन यह भी समस्याओं के इन प्रकार के लिए उपयोगी हो सकता है।

Celery पर भी एक नज़र डालें। यह विभिन्न दलालों पर पायथन/Django के लिए एक कार्य कतार लागू करता है। शायद आपकी समस्या के लिए एक ओवरकिल, लेकिन यदि आप एकाधिक मशीनों पर अधिक फ़ंक्शन कॉल करने जा रहे हैं तो यह आपको अपने कनेक्शन का प्रबंधन करने में बहुत अधिक सिरदर्द बचाएगा।

2

मुझे लगता है कि आप ssh_decorate उपयोगी

अजगर आदेशों इस सरल डेकोरेटर के साथ अपने दूरस्थ सर्वर पर चलाया जाएगा मिलेगा:

from ssh_decorate import ssh_connect 
ssh=ssh_connect('user','password','server') 

#Run a python function 
@ssh 
def python_pwd(): 
    import os 
    return os.getcwd() 

print (python_pwd())