Невозможно получить доступ к камере через веб-браузер
Я пишу скрипт Python CGI, который я хочу запустить в браузере моего ноутбука. Этот сценарий разделит SSH на два писа и даст команду сфотографировать. Сервер, на котором размещен этот сценарий, находится на одном из Pis, к которому я хочу подключиться по SSH, и этот Pi также выступает в качестве точки доступа для подключения другого Pi и моего ноутбука (все является локальной сетью, не подключенной к Интернету),
Я успешно могу запустить этот скрипт в браузере моего ноутбука для запуска простых команд, таких как ls -l
на обоих Pis и распечатайте результаты для обоих в браузере. Но я в конечном итоге хочу иметь возможность дать raspistill
Команда для обоих пис. Когда я делаю это, только Pi с сервером снимает изображение, а другой Pi - нет. Я предполагаю, что это потому, что разрешения для сервера не установлены должным образом (я попытался выполнить команды как sudo
но все равно не повезло). Однако, если я запускаю тот же сценарий на Python IDLE, он работает нормально. Может кто-нибудь помочь мне определить проблему?
Вот мой сценарий:
#! /usr/bin/env python3
from pssh import ParallelSSHClient
import cgi
print("Content-Type: text/plain\r\n")
print("\r\n ")
host = ['172.24.1.1','172.24.1.112']
user = 'XXXX'
password = 'XXXX'
client = ParallelSSHClient(host, user, password)
output = client.run_command('raspistill -o test.jpg', sudo=True)
// AMENDMENT:
for line in output['172.24.1.1'].stdout: // works as well with '172.24.1.112'
print(line)
ПОПРАВКА: Видимо, если я что-то выводить из stdout
это работает отлично. Почему это так? Это просто ждет меня, чтобы очистить вывод или что-то? Я подозреваю, что это может быть проблема с пакетом pssh, который я использую.
2 ответа
После тщательного прочтения документации для pssh
Модуль, моя проблема была связана с кодами выхода и как они обрабатываются.
Документация о run_command
говорится, что:
функция вернется после установления соединения и аутентификации и после отправки команд на успешно установленные каналы SSH.
И в результате:
Из-за этого коды выхода не будут немедленно доступны даже для команд, которые выходят немедленно.
Первоначально я просто слепо управлял run_command
ожидая завершения команд, но оказывается, что мне нужно получить коды завершения, чтобы действительно завершить процессы, выполняемые командами. В документации указано несколько способов сделать это:
Хотя бы один из
- Итерация по stdout / stderr до завершения
- призвание
client.join(output)
необходимо вызватьparallel-ssh
ждать завершения команд и иметь возможность собирать коды выхода.
Вот почему в моей поправке к коду, где я выводил из stdout, команды, казалось, работали правильно.
В своем пи, зайди в терминал и набери sudo raspi-config
а затем перейдите с помощью клавиш камеры и затем включите его. Это перезапустит тебя пи. С https://www.raspberrypi.org/documentation/configuration/camera.md:
Используйте клавиши курсора, чтобы перейти к опции камеры, и выберите "включить". При выходе из raspi-config будет запрошена перезагрузка. Опция включения гарантирует, что при перезагрузке будет запущена правильная прошивка графического процессора с драйвером камеры и настройкой, а разделение памяти графического процессора будет достаточным, чтобы позволить камере приобрести достаточно памяти для правильной работы.
После этого зайдите в sudo raspi-config
и включите ssh (что является еще одним вариантом, аналогичным пи-камере). Ссылка для этого здесь