Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用python远程执行进程_Python_Ssh - Fatal编程技术网

如何使用python远程执行进程

如何使用python远程执行进程,python,ssh,Python,Ssh,我想使用Python连接到远程服务器并在其上执行一个进程。我希望能够获取流程的返回代码和stderr(如果有)。以前有人做过这样的事吗。我已经用ssh完成了,但我想用Python脚本完成 干杯。好吧,您可以从python调用ssh import subprocess ret = subprocess.call(["ssh", "user@host", "program"]); # or, with stderr: prog = subprocess.Popen(["ssh", "user@ho

我想使用Python连接到远程服务器并在其上执行一个进程。我希望能够获取流程的返回代码和stderr(如果有)。以前有人做过这样的事吗。我已经用ssh完成了,但我想用Python脚本完成


干杯。

好吧,您可以从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]
使用为此目的而创建的,而不是使用
子流程
。下面是一个例子:

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
模块,但该模块现在已被弃用,是用python提供ssh功能的最新模块。

如果您想了解ssh调用的细节,可以使用它 该库面向部署和服务器管理,但对于此类问题也很有用


也来看看。这在各种代理上实现了Python/Django的任务队列。对于您的问题来说,这可能是一种过火的做法,但是如果您要在多台机器上调用更多函数,那么管理您的连接将为您省去很多麻烦

您需要确保对远程主机进行基于密钥的身份验证,并使用正确的密钥。否则,系统会提示您输入密码。很好,显然我已经过时了-本打算推荐os.spawnlp,但我看到引入了子流程模块来替换它。谢谢你,伙计。通过ssh执行命令时,如果ssh本身没有任何问题,则返回代码和stderr是exec'd命令的返回代码。我可以使用popen类和communicate()方法从那里访问它。即使在发布这个答案的时候,ssh模块的前一个版本(称为Paramiko)仍然存在。最好使用Fabric或Paramiko,如下答案中所述。Fabric是比paramiko更高级别的接口。重复:示例:由于收购,这是Microsoft许可的开源。它在Linux上运行良好。