如何用Python远程执行进程

30 投票
3 回答
78209 浏览
提问于 2025-04-15 12:01

我想用Python连接到一个远程服务器,并在上面执行一个程序。我希望能够获取这个程序的返回代码和错误信息(如果有的话)。有没有人之前做过类似的事情?我之前用ssh做过,但我想通过Python脚本来实现。

谢谢!

3 个回答

5

如果你想把ssh调用的细节封装起来,可以试试Fabric这个库。这个库主要是用来部署和管理服务器的,但对于你遇到的这些问题也可能会很有帮助。

另外,可以看看Celery。这个工具为Python/Django提供了一个任务队列,支持多种消息中间件。虽然可能对你的问题来说有点复杂,但如果你需要在多台机器上调用更多的功能,它可以帮你省去很多管理连接的麻烦。

43

使用一个叫做 paramiko 的ssh模块,这个模块专门为这个目的而创建,别再用 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功能。

27

好吧,你可以在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]

撰写回答