在Python脚本中以SSH连接

时间:2017-02-13 18:44:55

标签: python ssh raspberry-pi ip raspberry-pi3

我在SSH中连接到第一个Raspberry Pi(172.18.x.x),我想在第一个RPI上启动脚本,但脚本在另一个Raspberry Pi(192.168.x.x)上。 首先,我进行了配置,无需密码即可连接第一个RPI。 当我在第一个时,我正在启动这个命令:

ssh pi@192.168.x.x 'sudo python script_RPI2.py'

这是正常的,我可以检查正确的结果,但我想在第一个RPI上的另一个脚本中启动此脚本。所以,我把上一个命令放在文件中:script_RPI1.py。 然后,我正在启动脚本:sudo python script_RPI1.py 我收到以下错误:

 ssh pi@192.168.x.x 
         ^
SyntaxError: invalid syntax

有人对我的问题有所了解吗?

2 个答案:

答案 0 :(得分:0)

你是如何启动脚本的?从您提供的最小信息中可以看出,您正在尝试或在Python交互式解释器中执行该命令,或者您希望在解释器中执行该命令,而您忘记用引号(")将其包围以便把它变成一个字符串。

请尝试解释一下。

您想要运行bash命令:

ssh pi@192.168.x.x 'sudo python script_RPI2.py'

你在.sh文件中显示它,如下例所示:

#!/bin/sh

ssh pi@192.168.x.x 'sudo python script_RPI2.py'

保存这个文件之后只需执行./name_of_file.sh,它只是在终端中运行你的bash文件,如果你想运行一个python脚本在另一个进程中打开一个终端并执行你应该的终端命令的字符串看看这样的事情:

from subprocess import call
call(["ls"])

这将在另一个终端进程中执行ls并将结果返回给您。请检查您想要实际做什么,并决定其中一条路径。

答案 1 :(得分:0)

修改了整个答案,实际上在代码上加了一些额外的时间。您要集成的完整解决方案将类似于下面的代码。请注意,代码的设置方式是您可以定义要连接的主机,以及要在远程RPi中执行的命令

import subprocess
import sys

remoteHost="pi@192.168.x.x"
command="python /path/to/script.py"

ssh = subprocess.Popen(["ssh", "%s" % remoteHost, 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

yourVar = result   ### This is where you assign the remote result to a variable