आप SSH पर रिमोट कंप्यूटर पर कनेक्ट करके पायथन मॉड्यूल का उपयोग कर सकते हैं, लेकिन SSH केवल सीमित कार्यक्षमता प्रदान करता है इसलिए सीधे मॉड्यूल कॉल करना संभव नहीं है।
समाधान: रिमोट स्क्रिप्ट निष्पादित करें
आप रिमोट सर्वर पर एक स्क्रिप्ट कॉल कर सकते हैं और उसे चलाकर इस समस्या से बच सकते हैं। स्क्रिप्ट से परिणाम प्राप्त करने के लिए, आप stdout से लाइनें पढ़कर इसे देख सकते हैं यदि आप अपना परिणाम लॉग कर रहे हैं। वैकल्पिक रूप से, आप परिणाम को एक फ़ाइल में लिख सकते हैं और फिर परिणाम उत्पन्न होने और फ़ाइल में लिखे जाने के बाद फ़ाइल पढ़ सकते हैं।
नेटवर्क-ओनली समाधान: Pyro
यदि आप इसे केवल नेटवर्क पर करना चाहते हैं, तो आप Pyro देख सकते हैं (https://pypi.python.org/pypi/Pyro4)। Pyro का अर्थ है PYthon Remote Objects। यह एक लाइब्रेरी है जो आपको ऐसे एप्लिकेशन बनाने में सक्षम बनाती है जिसमें ऑब्जेक्ट नेटवर्क पर एक-दूसरे से बात कर सकते हैं, न्यूनतम प्रोग्रामिंग प्रयास के साथ। आप सामान्य पायथन मेथड कॉल का उपयोग कर सकते हैं, लगभग हर संभव पैरामीटर और रिटर्न वैल्यू टाइप के साथ, और Pyro सही कंप्यूटर पर सही ऑब्जेक्ट का पता लगाकर मेथड निष्पादित करने का ध्यान रखता है।
Paramiko उदाहरण
import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('hostname', username='user', password='pass')
# रिमोट स्क्रिप्ट चलाएं
stdin, stdout, stderr = ssh.exec_command('python3 /remote/script.py')
output = stdout.read().decode()
print(output)
ssh.close()
Pyro4 उदाहरण
# सर्वर साइड
import Pyro4
@Pyro4.expose
class MyModule:
def my_function(self, x):
return x * 2
daemon = Pyro4.Daemon()
uri = daemon.register(MyModule)
print("Server ready:", uri)
daemon.requestLoop()
# क्लाइंट साइड
import Pyro4
obj = Pyro4.Proxy("PYRO:obj@host:port")
result = obj.my_function(21) # 42 लौटाता है
आधुनिक विकल्प
- XML-RPC / JSON-RPC - सरल RPC
- FastAPI / Flask - REST API के रूप में उजागर करें
- gRPC - उच्च-प्रदर्शन RPC
- Ray / Dask - वितरित कंप्यूटिंग