2017-02-13 78 views
0

我在SSH中连接到第一个Raspberry Pi(172.18.xx),我想在第一个RPI上启动脚本,但脚本在另一个树莓派上(192.168.xx) 。 首先,我配置了无密码连接到第一个RPI的第二个RPI。 当我在第一个,我推出这个命令:以Python脚本在SSH中连接

ssh [email protected] 'sudo python script_RPI2.py' 

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

ssh [email protected] 
     ^
SyntaxError: invalid syntax 

任何人有关于我的问题的想法?

回答

0

你是如何启动脚本的?您所提供的最基本的信息显示,您正在尝试或在Python交互式解释器中执行该命令,或者您想在解释器中执行该命令,并且忘记用引号(“)将它包围起来以使其成为。字符串

试图解释多一点请

您想运行bash命令:

ssh [email protected] 'sudo python script_RPI2.py' 

告诉你做一个sh文件,如下面的例子:

#!/bin/sh 

ssh [email protected] 'sudo python script_RPI2.py' 

保存此文件后,只需执行./name_of_file.sh,它将简单地在终端中运行您的bash文件,如果您想要运行一个python脚本来打开另一个进程中的终端并执行字符串,看起来像这样:

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

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

+0

我说,我从第一RPI启动脚本来执行命令一起( 172.18.xx):'sudo python script_RPI1.py'并且在这个脚本中,有命令:'ssh [email protected]'sudo python script_RPI2.py''这不是引号问题,因为我得到了同样的错误用引号。这是script_RPI1.py的代码:'#!/ usr/bin/python ssh [email protected]'sudo python script_RPI2.py''如果我在脚本中删除了'sudo ...',我得到了同样的错误:'SyntaxError:无效的语法' – DjibTgy

+0

好吧我想我明白了,行:'ssh [email protected]'sudo python script_RPI2.py''不是一个有效的python语句,你试图运行它。请只回答我这个问题,你是否希望将它作为机器上的shell脚本启动,或者是在进程中打开终端并执行命令的python脚本? –

+0

事实上,在script_RPI1.py和script_RPI2.py文件中,我有很多Python编码的代码,所以最好在Python中继续而不是bash shell。同时,是否可以在Python脚本中启动bash脚本?在我的情况下,我将创建一个文件:script.sh,用#编写!/ bin/sh ssh [email protected]'sudo python script_RPI2.py'在第一个RPI中,我将通过script_RPI1.py中的'bash script.sh'调用此脚本。可能吗 ?如果是的话,我会明天尝试 – DjibTgy

0

修改了整个答案,并在代码上添加了一些额外的时间。您整合的完整解决方案看起来像下面的代码。请注意,代码是安装的方式,你可以定义连接到主机,您要在远程RPI

import subprocess 
import sys 

remoteHost="[email protected]" 
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 
+0

这是错误信息:'Traceback(最近呼叫的最后一个): 文件“script_RPI1.py”,第110行,在 Flow_sensor = call(['ssh [email protected]“sudo python/home/pi/()* 文件“/usr/lib/python2.7/subprocess.py”,第522行,致电 返回Popen(* popenargs,** kwargs).wait() 文件“/ usr/lib/python2.7/subprocess.py“,第710行,在__init__中 errread,errwrite) 文件”/usr/lib/python2.7/subprocess.py“,第1335行,在_execute_child中 raise child_exception OSError:[ Errno 2]没有这样的文件或目录' – DjibTgy

+0

我试着把你的方法放在script_RPI1.py文件中:'from subprocess import call RPI2_Sensor = call(['ssh [email protected]“sudo python /home/pi/script_RPI2.py''])print(RPI2_Sensor)'错误信息低于 – DjibTgy

+0

我改变了整个答案并添加了一些代码允许您轻松插入远程主机和要执行的命令,在这种情况下,您的Python脚本可以从传感器获取值。我希望它有帮助。 – MikeBoss