Ошибка исключения str () - PullRequest
0 голосов
/ 04 февраля 2019

Я начинаю создавать новый 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 Ответ

0 голосов
/ 04 февраля 2019

Из документации 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, чтобы исправить это.

...