我将 Python 嵌入到 C++ 应用程序中(使用 Python C API),我希望抛出的 Python 异常由已在 C++ 中设置的异常处理程序机制处理。此异常处理程序机制将打印出异常本身,因此我不希望嵌入式 Python 解释器将其打印到屏幕上。我可以设置嵌入式 Python 解释器以某种方式抑制控制台输出吗?
最佳答案
您可以将 Stub-Streamhandler 插入 python 中的 standard out
和 standard error
channel 。
这里是一个示例(包括对两个 channel 进行清算):
import sys
import cStringIO
print("Silencing stdout and stderr")
_stdout = sys.stdout
_stderr = sys.stderr
sys.stdout = cStringIO.StringIO()
sys.stderr = cStringIO.StringIO()
print("This should not be printed out")
sys.stdout = _stdout
sys.stderr = _stderr
print("Revoiced stdout and stderr")
运行此示例应产生以下输出:
Silencing stdout and stderr
Revoiced stdout and stderr
[更新]
这里是发送到 devnull
的节省内存的变体:
import os, sys
with open(os.devnull, 'w') as devnull:
sys.stdout = devnull
sys.stderr = devnull
# ... here your code
关于c++ - 抑制 Python 打印输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12283465/