2009-06-03 27 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())