c++ - 抑制 Python 打印输出

标签 c++ python

我将 Python 嵌入到 C++ 应用程序中(使用 Python C API),我希望抛出的 Python 异常由已在 C++ 中设置的异常处理程序机制处理。此异常处理程序机制将打印出异常本身,因此我不希望嵌入式 Python 解释器将其打印到屏幕上。我可以设置嵌入式 Python 解释器以某种方式抑制控制台输出吗?

最佳答案

您可以将 Stub-Streamhandler 插入 python 中的 standard outstandard 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/

相关文章:

c++ - 我如何判断 CString 是在堆上还是在堆栈上分配内存?

python - 如何在传递一些函数后返回 'for loop' 中的相同数据帧,而不附加等?

Python 3.6 字典。立即从输入中获取值

c++ - 右值引用是否像左值引用一样工作?

c++ - 当没有数据可读时,读取套接字会给出 errno EAGAIN,而且如果我断开网络连接

python - Flask-Python 空 html 输入返回值的特征

python - Flask 如何通过 init_db() 声明性地使用 sqlalchemy?

python - 为什么 sns.lmplot 和 FacetGrid+plt.scatter 从相同的数据创建不同的散点?

java - 使用 NewGlobalRef 时的 JNI "local reference table overflow"

c++ - 为什么将增量运算符应用于常量变量时​​会出现编译器错误