2009-06-03 67 views
28

我也想連接並使用python在遠程服務器上執行進程。我希望能夠獲得進程的返回碼和stderr(如果有的話)。以前有沒有人做過這樣的事情?我已經完成了與ssh,但我想從python腳本。如何使用python遠程執行進程

乾杯。

+1

重複:http://stackoverflow.com/questions/536370/execute -arbitrary-python-code-remote-can-it-done – 2009-06-03 21:21:34

+0

示例:http://stromberg.dnsalias.org/~strombrg/looper/由於收購,這是微軟授權的開源軟件。它在Linux上運行良好。 – user1277476 2014-09-27 18:30:08

回答

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] 
40

使用這是爲了這個目的,而不是使用subprocess創建ssh module called paramiko。下面是下面一個例子:

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:以前用的是ssh模塊的例子,但現在已被棄用,paramiko是跟上時代的模塊,在Python提供SSH功能。

3

也許如果你想打包你可以使用的ssh調用的螺母和螺栓Fabric 這個庫適用於部署和服務器管理,但它也可以用於這些類型的問題。

也看看Celery。這爲不同的代理實現了Python/Django的任務隊列。對於你的問題可能是一種矯枉過正,但是如果你打算在多臺機器上調用更多的功能,它將爲你節省很多頭痛的管理你的連接。

2

我想你會發現ssh_decorate有用

Python命令將在遠程服務器上用這個簡單的裝飾運行:

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