我想捕获从python模块A
生成的错误消息。 A
用C ++和SWIG编写,因此我无法捕获Python的sys.stderr
。
>>> import A
>>> A.func() # this prints an error message by C++ std::cerr.
this is an error message from module A
我想做的是抑制错误消息并根据错误类型更改脚本行为。但是A.func()
不会返回错误号。
假设我在下面使用的contextlib是正确的,则没有帮助。
>>> import io
>>> f = io.StringIO()
>>> import contextlib
>>> with contextlib.redirect_stderr(f):
... no_return = A.func()
ERROR MESSAGE HERE
>>> f.getvalue()
>>>
答案 0 :(得分:0)
谢谢@ PM2Ring
https://eli.thegreenplace.net/2015/redirecting-all-kinds-of-stdout-in-python/#id1
稍作修改:将所有stdout
替换为stderr
,并如下所示支持macOS,它可以按预期运行。
if sys.platform == 'darwin':
c_stderr = ctypes.c_void_p.in_dll(libc, '__stderrp')
else:
c_stderr = ctypes.c_void_p.in_dll(libc, 'stderr')