2009-06-03 47 views
28

Tôi cũng muốn kết nối và thực thi quy trình trên máy chủ từ xa bằng python. Tôi muốn có thể lấy mã trả lại và stderr (nếu có) của quá trình. Có ai từng làm bất cứ điều gì như thế này trước đây không. Tôi đã làm nó với ssh, nhưng tôi muốn làm điều đó từ kịch bản python.Cách thực hiện quy trình từ xa bằng python

Chúc mừng.

+1

trùng lặp: http://stackoverflow.com/questions/536370/execute -arbitrary-python-code-remote-can-it-be-done –

+0

Ví dụ: http://stromberg.dnsalias.org/~strombrg/looper/ Đây là mã nguồn mở do Microsoft cấp phép do mua lại. Nó hoạt động tốt trên Linux. – user1277476

Trả lời

23

Vâng, bạn có thể gọi ssh từ trăn ...

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

Bạn sẽ cần đảm bảo rằng bạn có xác thực dựa trên khóa cho máy chủ từ xa và các phím thích hợp. Nếu không, bạn sẽ được nhắc nhập mật khẩu. – slacy

+0

đẹp, rõ ràng tôi đã lỗi thời - sẽ giới thiệu os.spawnlp, nhưng tôi thấy mô-đun subprocess đã được giới thiệu để thay thế nó. – klochner

+0

Cảm ơn anh bạn. Khi bạn thực thi lệnh trên ssh, mã trả về và stderr là lệnh của lệnh exec'd, nếu ssh không có bất kỳ vấn đề nào. Tôi có thể lớp popen và phương thức communication() để khai thác nó từ đó. – stinkypyper

40

Sử dụng ssh module called paramiko được tạo ra cho mục đích này thay vì sử dụng subprocess. Dưới đây là một ví dụ dưới đây:

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() 

UPDATE: Ví dụ sử dụng để sử dụng các mô-đun ssh, nhưng mà bây giờ bị phản đối và paramiko là module up-to-date mà cung cấp chức năng bảo mật ssh trong python.

3

Có lẽ nếu bạn muốn quấn hạt và bu lông của ssh gọi cho bạn có thể sử dụng Fabric Thư viện này được hướng tới việc triển khai và quản lý máy chủ, nhưng nó cũng có thể có ích cho những loại vấn đề.

Ngoài ra, hãy xem Celery. Điều này thực hiện một hàng đợi nhiệm vụ cho Python/Django trên các nhà môi giới khác nhau. Có thể một vấn đề quá mức cho vấn đề của bạn, nhưng nếu bạn định gọi nhiều chức năng hơn trên nhiều máy, nó sẽ giúp bạn tiết kiệm rất nhiều đau đầu trong việc quản lý các kết nối của bạn.

2

Tôi nghĩ rằng bạn sẽ tìm thấy ssh_decorate hữu ích

lệnh Python sẽ được chạy trên máy chủ từ xa của bạn với trang trí đơn giản này:

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()) 
Các vấn đề liên quan