Ошибка исключения str()
Я начинаю создавать новый 3D-сканер с Raspberry Pi 3B + и Canon 6D. У меня есть часть кода Python для восстановления изображений благодаря библиотеке gphoto2, но я не могу перевести свою конфигурацию ISO в рефлекс.
Я уже сделал несколько тестов, но ничего не работает. У меня всегда одна и та же ошибка:
Я использую команду gp для отправки всех параметров в рефлекс Canon.
Импортировать:
import time
from datetime import datetime
from sh import gphoto2 as gp
import signal, os, subprocess, shutil
Пример команды Gp (все работает):
CaptureImageDownload = ["--capture-image-and-download"]
CaptureImage = ["--capture-image"]
Но эта строка не работает:
ValueISO = ["--set-config iso=0"]
Вот ошибка, отображаемая в командном терминале
File "CameraShot.py", line 124, in <module>
gp(ValueISO)
File "/usr/local/lib/python2.7/dist-packages/sh.py", line 1427, in __call__
return RunningCommand(cmd, call_args, stdin, stdout, stderr)
File "/usr/local/lib/python2.7/dist-packages/sh.py", line 774, in __init__
self.wait()
File "/usr/local/lib/python2.7/dist-packages/sh.py", line 792, in wait
self.handle_command_exit_code(exit_code)
File "/usr/local/lib/python2.7/dist-packages/sh.py", line 815, in handle_command_exit_code
raise exc
sh.ErrorReturnCode_1: <exception str() failed>
Я не могу написать эту командную строку, иначе моя камера не понимает порядок.
1 ответ
От sh
документация по передаче аргументов:
При передаче нескольких аргументов команде каждый аргумент должен быть отдельной строкой [.]
Ваши не отдельные строки. Выделите различные части (в местах, не заключенных в кавычки):
ValueISO = ["--set-config", "iso=0"]
Также см. Подробное объяснение проекта, почему это так; но короткий ответ таков sh
не разбирает аргументы в отдельные строки, как это делает оболочка.
Вы также можете использовать shlex.split()
Функция для управления расщеплением для вас:
ValueISO = shlex.split("--set-config iso=0")
Обратите внимание, что sh
также поддерживает использование аргументов ключевых слов, где set_config="iso=0"
переводится на ["--set-config", "iso=0"]
для тебя. Вы можете использовать это как:
value_iso = dict(set_config="iso=0")
затем
gp(**value_iso)
Что вы получаете sh.ErrorReturnCode_1: <exception str() failed>
вероятно ошибка в sh
, Python использует type(exception).__name__: str(exception)
как последняя строка трассировки, и str()
вызов не удается на sh.ErrorReturnCode
исключение (sh.ErrorReturnCode_1
это подкласс sh.ErrorReturnCode
). Я могу видеть из sh
Исходный код для класса исключения, в котором сообщение об ошибке декодируется из байтов в текст Unicode, а Python 2 фактически не может обрабатывать объекты Unicode, возвращаемые из __str__
метод. Я подал отчет об ошибке с sh
чтобы это исправить.