如何使用python远程执行进程

时间:2009-06-03 20:12:56

标签: python ssh

我想使用Python连接并在远程服务器上执行进程。我希望能够获得进程的返回码和stderr(如果有的话)。有没有人曾经做过这样的事情。我用ssh完成了它,但我想从Python脚本中完成它。

干杯。

3 个答案:

答案 0 :(得分:42)

使用为此目的而创建的ssh module called paramiko,而不是使用subprocess。以下是一个例子:

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

更新:用于使用ssh模块的示例,但现在已弃用,paramiko是在python中提供ssh功能的最新模块。

答案 1 :(得分:24)

好吧,你可以从python中调用ssh ......

import subprocess
ret = subprocess.call(["ssh", "user@host", "program"]);

# or, with stderr:
prog = subprocess.Popen(["ssh", "user@host", "program"], stderr=subprocess.PIPE)
errdata = prog.communicate()[1]

答案 2 :(得分:5)

也许如果你想包装ssh调用的章节,你可以使用Fabric 该库面向部署和服务器管理,但它也可能对这类问题有用。

另请查看Celery。这为各种代理实现了Python / Django的任务队列。对你的问题可能有点过分,但如果你打算在多台机器上调用更多的功能,它将为你节省很多管理连接的麻烦。