2010-09-23 12 views
6

का उपयोग कर शेल स्क्रिप्ट रिमोट निष्पादन क्या कोई तरीका है कि मैं रिमोट यूनिक्स मशीन पर स्थित शेल स्क्रिप्ट को निष्पादित करने के लिए विंडोज़ पर पाइथन का उपयोग कर सकता हूं?पाइथन

पीएस: देर से संपादन के बारे में खेद है। मुझे परमिको के बारे में पता है, लेकिन मैं जानना चाहता था कि इसके बिना ऐसा करने का कोई तरीका है या नहीं। शुरुआत के लिए, क्या यह subprocess() के साथ किया जा सकता है?

+0

के संभावित डुप्लिकेट [रिमोट सर्वर आदेश पर अमल] (http://stackoverflow.com/questions/3173977/remote-server-command-execute) मानक Pyt में –

+1

कुछ भी नहीं है हनो लाइब्रेरी आपको यूनिक्स मशीन पर दूरस्थ निष्पादन करने की अनुमति देगी। या तो आपको एसएसएच का उपयोग करना होगा या अपना खुद का सर्वर लिखना होगा (नहीं)। यदि आप पैरामीको का उपयोग करने से बचाना चाहते हैं, तो ट्विस्ट एक वैकल्पिक एसएसएच कार्यान्वयन प्रदान करता है। हालांकि किसी भी तरह से, आपको किसी तृतीय पक्ष पैकेज का उपयोग करने की आवश्यकता होगी। – Rakis

+0

आप परमिको से बच सकते हैं। जैसा कि राकिस द्वारा सुझाया गया है, आप ट्विस्ट में एसएसएच समर्थन का पता लगा सकते हैं। आप प्रमाण पत्र जोड़ सकते हैं ताकि आप पासवर्ड चुनौती से बच सकें और सबप्रोसेस में, आप सामान्य कमांड ssh उपयोगकर्ता @ servername चला सकते हैं और उसके बाद के बाद वाले सर्वर सर्वर पर निष्पादित किए जाएंगे। – pyfunc

उत्तर

3

पायथन में दूरस्थ खोल निष्पादन के लिए कोई 'बैटरी शामिल' मॉड्यूल नहीं है। मैं Fabric में देखने का सुझाव दूंगा, जो रिमोट मशीनों पर एसएसएच के माध्यम से काम करने के लिए वास्तव में एक अच्छा इंटरफ़ेस प्रदान करता है, शायद paramiko से थोड़ा सा अच्छा है। तुम भी खिड़कियों पर कपड़ा स्थापित कर सकते हैं ...

13

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

, आप आसानी से paramiko मॉड्यूल कि ssh स्वचालन

एक विशिष्ट उदाहरण प्रदान करता है का उपयोग कर सकते ssh का उपयोग कर के लिए:

import paramiko 
import sys 
import os 
import os.path 
passwd = "" 
ssh = paramiko.SSHClient() 
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
ssh.connect('servername', username, password=passwd) 
stdin, stdout, stderr = ssh.exec_command('df -h') 
x = stdout.readlines() 
print x 
for line in x: 
    print line 
ssh.close() 

बदलें "df -h" कमांड के साथ आपकी खोल स्क्रिप्ट।

+0

यह बहुत अच्छा काम करता है! बस जो मैं खोज रहा था उसके लिए। – Nish

0

आपको या तो रिमोट मशीन पर किसी प्रकार का सर्वर चलाने की आवश्यकता होगी, या एसएसएच में और इसे स्वयं करें। क्लाइंट को सुनने और शेल स्क्रिप्ट को बंद करने के लिए कई पूर्व-लिखित पायथन सर्वरों में से एक का उपयोग करना मुश्किल नहीं होगा।

प्रमाणीकरण आपके लिए कोई समस्या हो सकती है या नहीं भी हो सकती है; ध्यान रखें कि कोई भी आपके द्वारा किए गए चरणों का पालन कर सकता है और संभवतः एक ही परिणाम प्राप्त कर सकता है। आप इंटर्बब्स पर अपनी स्क्रिप्ट शुरू करने की अनुमति नहीं देना चाहते हैं!

1

निश्चित रूप से, आमतौर पर एसएसएच प्रोटोकॉल ("सुरक्षित खोल" के लिए) के माध्यम से पाइथन उदा। paramiko तृतीय-पक्ष एक्सटेंशन द्वारा।

0

यदि आप paramiko का उपयोग नहीं करना चाहते हैं, तो telnetlib आज़माएं। आप दूरस्थ आदेश निष्पादित करने के लिए इसका उपयोग कर सकते हैं।

2

मैं बहु और उपप्रक्रिया है कि मैं परीक्षण नहीं किया लेकिन डॉक्स के आधार पर काम करना चाहिए के साथ एक मिल गया है ...

सर्वर:

import subprocess 
from multiprocessing.managers import BaseManager 
def get_subprocess_module(): 
    return subprocess 
class MyManager(BaseManager): 
    pass 
MyManager.register('subprocess', get_subprocess_module) 
MyManager(address=('', 50000), authkey='makecrazy').get_server().serve_forever() 

रिमोट ग्राहक:

from multiprocessing.managers import BaseManager 
class MyManager(BaseManager): 
    pass 
MyManager.register('subprocess') 
manager = MyManager(address=('dns.of.remote.server',50000),authkey='makecrazy') 
manager.connect() 
remoteSubprocess = manager.subprocess() 
rc = remoteSubprocess.call(['ls', '-aplh'])