2017-02-13 16 views
0

Я подключен к первой малиневой Pi (172.18.xx) в SSH, и я хотел бы запустить скрипт в первом RPI, но сценарий находится на другом малине Pi (192.168.xx) , Сначала я установил конфигурацию для подключения без пароля ко второму RPI с первого. Когда я нахожусь на первом, я запускать эту команду:Подключение в SSH в скрипте Python

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 или хотите выполнить ее в интерпретаторе, и вы забыли окружить его кавычками («), чтобы сделать это как . строка

Попытка объяснить немного больше, пожалуйста,

вы хотите запустить команду Баш:.

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' 'Это не проблема кавычек, потому что я получил ту же ошибку с кавычками. Это код скрипта_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, и вы пытаетесь запустить ее как таковую , Пожалуйста, просто ответьте мне на это, предпочитаете ли вы запускать его как сценарий оболочки на вашем компьютере или скрипт python, который открывает терминал в процессе и выполняет ли команда? –

+0

На самом деле, в файле script_RPI1.py и script_RPI2.py, у меня появилось много строк с кодировкой Python, поэтому лучше продолжить работу на Python вместо оболочки bash. Между тем, возможно ли запустить скрипт bash в скрипте Python? В моем случае я создам файл: script.sh, состоящий из '#!/ bin/sh ssh [email protected] 'sudo python script_RPI2.py'' в первом RPI, и я буду называть этот скрипт 'bash script.sh' в script_RPI1.py. Является ли это возможным ? Если да, я постараюсь, что завтра – 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/script_RPI2.py "']) Файл« /usr/lib/python2.7/subprocess.py », строка 522, при вызове return Popen (* popenargs, ** kwargs) .wait() Файл«/usr/Библиотека/python2.7/subprocess.py», строка 710, в __init__ errread, errwrite) Файл "/usr/lib/python2.7/subprocess.py", строка 1335, в _execute_child рейза child_exception OSError: [ Errno 2] Нет такого файла или каталога ' – DjibTgy

+0

Я пробовал с вами метод, вставив в файл script_RPI1.py: 'из запроса на импорт подпроцесса RPI2_Sensor = call (['ssh [email protected] "sudo python /home/pi/script_RPI2.py"']) print (RPI2_Sensor) 'Сообщение об ошибке ниже – DjibTgy

+0

Я изменил весь ответ и добавил код, который будет позволяют легко вставить удаленный хост и команду, которую вы хотите выполнить, в этом случае ваш скрипт Python, чтобы получить значение от датчика. Я надеюсь, что это помогает. – MikeBoss

 Смежные вопросы

  • Нет связанных вопросов^_^