python - 异常 str() 失败
问题描述
我开始使用 Raspberry Pi 3B + 和 Canon 6D 创建新的 3D 扫描仪。由于 gphoto2 库,我有一部分 Python 代码可以恢复图像,但我无法将我的 ISO 配置放在反射上。
我已经做了几次测试,但没有任何效果。我总是有同样的错误:
我使用 gp 命令将所有参数发送到佳能反射。
进口 :
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>
我不能写这个命令行,否则我的相机不理解这个命令。
解决方案
将多个参数传递给命令时,每个参数必须是单独的字符串[.]
你的不是单独的字符串。拆分不同的部分(在没有被引号包围的空格上):
ValueISO = ["--set-config", "iso=0"]
另请参阅项目的详细说明,了解为什么会这样;但简短的回答是,sh
它不会像 shell 那样将参数解析为单独的字符串。
您还可以使用该shlex.split()
函数为您处理拆分:
ValueISO = shlex.split("--set-config iso=0")
请注意,sh
它还支持使用关键字 arguments,其中为您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
. Pythontype(exception).__name__: str(exception)
用作回溯的最后一行,并且str()
调用因sh.ErrorReturnCode
异常而失败(sh.ErrorReturnCode_1
是 的子类sh.ErrorReturnCode
)。我可以从sh
异常类的源代码中看到,错误消息是从字节解码为 Unicode 文本,而 Python 2 实际上无法处理从__str__
方法返回的 Unicode 对象。我已经提交了一个错误报告sh
来修复它。
推荐阅读
- r - R:如何从网格创建平均值的热图并用 ggplot 绘制它?
- c# - 如何限制 .NET 中 DynamoDB 中 context.Query 的结果数量
- java - NoSuchMethodError:'void com.google.common.base.Preconditions.checkState
- reactjs - 对象作为 React 子级无效(找到:带有键 {state, addBlog} 的对象)。如果您打算渲染一组孩子,请使用数组
- c++ - std::array 初始化,对于没有默认 ctor 的对象?
- reactjs - 如何使用 React Native 限制换行符的数量?
- c# - NetMQ 多线程的最新示例
- c# - GTK# Widget Gtk:: DrawingArea 不显示或响应信号
- nginx - kubernetes-如何使用 nginx 入口控制器创建子域 localhost?
- shiny - 如何在反应变量 Shiny R 上进行选择