您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

在Python的远程计算机上执行命令

在Python的远程计算机上执行命令

当然,有几种方法可以做到!

假设您在raspBerry.lan主机上安装了RaspBerry Pi,并且用户名irfan

这是运行命令的认Python库。 您可以使其运行ssh并在远程服务器上执行所需的任何操作。

scrat已在他的回答中提及。如果您不想使用任何第三方库,则绝对应该这样做。 来自这里的简单示例:

import subprocess
import sys

HOST="www.example.org"
# Ports are handled in ~/.ssh/config since we use OpenSSH
COMMAND="uname -a"

ssh = subprocess.Popen(["ssh", "%s" % HOST, COMMAND],
                       shell=False,
                       stdout=subprocess.PIPE,
                       stderr=subprocess.PIPE)
result = ssh.stdout.readlines()
if result == []:
    error = ssh.stderr.readlines()
    print >>sys.stderr, "ERROR: %s" % error
else:
    print result

它完全满足您的要求:通过ssh连接,执行命令,返回输出。无需第三方库。

您也可以使用来自动输入密码/密码pexpect

paramiko添加了SSH协议支持的第三方库,因此它可以像SSH客户端一样工作。

连接到服务器,执行并获取ls -l命令结果的示例代码如下所示:

import paramiko

client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect('raspBerry.lan', username='irfan', password='my_strong_password')

stdin, stdout, stderr = client.exec_command('ls -l')

for line in stdout:
    print line.strip('\n')

client.close()

您也可以使用实现它fabric。 Fabric是一种部署工具,可以在远程服务器上执行各种命令。

它通常用于在远程服务器上运行内容,因此您可以轻松地将最新版本的Web应用程序放入,重新启动Web服务器,然后仅需一个命令即可。实际上,您可以在多个服务器上运行相同的命令,这太棒了!

尽管它是作为部署和远程管理工具制作的,但是您仍然可以使用它来执行基本命令。

# fabfile.py
from fabric.api import *

def list_files():
    with cd('/'):  # change the directory to '/'
        result = run('ls -l')  # run a 'ls -l' command
        # you can do something with the result here,
        # though it will still be displayed in fabric itself.

就像在远程服务器上键入cd /和一样ls -l,因此您将在根文件夹中获得目录列表。

然后在外壳中运行:

fab list_files

它将提示输入服务器地址:

No hosts found. Please specify (single) host string for connection: irfan@raspBerry.lan

:您还可以在fab命令中分配用户名和主机:

fab list_files -U irfan -H raspBerry.lan

或者,您可以将主机放入env.hostsfabfile中的变量。这是这样做的方法

然后将提示您输入SSH密码:

[irfan@raspBerry.lan] run: ls -l
[irfan@raspBerry.lan] Login password for 'irfan':

然后该命令将成功运行。

[irfan@raspBerry.lan] out: total 84
[irfan@raspBerry.lan] out: drwxr-xr-x   2 root root  4096 Feb  9 05:54 bin
[irfan@raspBerry.lan] out: drwxr-xr-x   3 root root  4096 Dec 19 08:19 boot
...
python 2022/1/1 18:28:58 有192人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶