Невозможно получить доступ к камере через веб-браузер

Я пишу скрипт 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 (что является еще одним вариантом, аналогичным пи-камере). Ссылка для этого здесь

Другие вопросы по тегам