2017-02-13 115 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