异常 str() 失败
Exception str() failed
我开始用 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>
我不能写这个命令行,否则我的相机不明白命令。
来自sh
documentation on passing in arguments:
When passing multiple arguments to a command, each argument must be a separate string[.]
你的不是单独的字符串。拆分不同的部分(在没有引号的空格上):
ValueISO = ["--set-config", "iso=0"]
另见项目detailed explanation on why this is;但简短的回答是 sh
没有像 shell 那样将参数解析为单独的字符串。
您还可以使用 shlex.split()
function 为您处理拆分:
ValueISO = shlex.split("--set-config iso=0")
请注意,sh
也是 supports using keyword 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
中的错误。 Python 使用 type(exception).__name__: str(exception)
作为回溯的最后一行,并且 str()
调用因 sh.ErrorReturnCode
异常而失败(sh.ErrorReturnCode_1
是一个 subclass of sh.ErrorReturnCode
). I can see from the sh
source code for the exception class that the error message is decoded from bytes to Unicode text, and Python 2 can't actually handle Unicode objects returned from a __str__
method. I've filed a bug report with sh
修好了。
我开始用 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>
我不能写这个命令行,否则我的相机不明白命令。
来自sh
documentation on passing in arguments:
When passing multiple arguments to a command, each argument must be a separate string[.]
你的不是单独的字符串。拆分不同的部分(在没有引号的空格上):
ValueISO = ["--set-config", "iso=0"]
另见项目detailed explanation on why this is;但简短的回答是 sh
没有像 shell 那样将参数解析为单独的字符串。
您还可以使用 shlex.split()
function 为您处理拆分:
ValueISO = shlex.split("--set-config iso=0")
请注意,sh
也是 supports using keyword 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
中的错误。 Python 使用 type(exception).__name__: str(exception)
作为回溯的最后一行,并且 str()
调用因 sh.ErrorReturnCode
异常而失败(sh.ErrorReturnCode_1
是一个 subclass of sh.ErrorReturnCode
). I can see from the sh
source code for the exception class that the error message is decoded from bytes to Unicode text, and Python 2 can't actually handle Unicode objects returned from a __str__
method. I've filed a bug report with sh
修好了。