我正在将Python嵌入到C++应用程序中(使用Python C API),我想要引发的Python异常由已经在C++中设置的异常处理机制处理。这个异常处理机制将自己打印出异常,所以我不希望嵌入式Python解释器将它打印到屏幕上。我可以设置嵌入式Python解释器以某种方式抑制控制台输出吗?禁止Python打印输出
1
A
回答
0
你是怎么执行代码的?如果一个异常没有被python直接捕获和打印(某人已经直接在python中安装了一个处理程序),它将被设置为异常处理,然后可以使用C来检查异常(请参阅参考手册中的异常处理一节)。
如果您从C代码调用python脚本,调用函数将返回NULL或-1(发生异常),现在您可以使用上述API读取异常(例如PyErr_Occurred())。 ..)。
但是,如果事情是由python代码本身完成的(如果有人在其代码中安装了钩子或其他东西并直接打印它),则没有任何变化可以轻松捕捉事物。也许你可以自己添加一个钩子,调用你的代码。这可以通过sys.excepthook(type,value,traceback)完成,一种解决方案是找到位置并将其从代码中移除,或者查看其他方法来绕过它。
这个网站是关于它非常丰富:Python API/include files
编辑: 对于重定向stdout或stderr可以使用C-API函数:
FILE* sto = fopen("out.txt", "w+");
FILE* ste = fopen("outErr.txt", "w+");
PySys_SetObject("stdout", PyFile_FromFile(sto, "out.txt","wb", fclose));
PySys_SetObject("stderr", PyFile_FromFile(ste, "outErr.txt","wb", fclose));
调用任何其他Python代码之前。我认为PyFile_FromFile也可能被其他的东西取代,但我迄今为止还没有使用过。
4
您可以将一个Stub-Streamhandler插入到Python中的standard out
和standard error
通道中。
这里的样品(含revoicing两个通道):
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
相关问题
- 1. 禁止打印电话(python)
- 2. 根据打印输出终止python
- 3. 打印python tkinter输出
- 4. 输出不打印在python
- 5. 禁止描述输出打印大熊猫数据帧时
- 6. 禁止打印从文件
- 7. Python +已禁用打印输出,并且无法取回
- 8. 打印输出
- 9. 打印输出
- 10. 输出打印
- 11. 打印输出
- 12. Django停止打印到标准输出
- 13. 从打印输出中阻止Node.js repl
- 14. 在libsvm中禁止输出(python)
- 15. 禁止CMD输出
- 16. 保存python打印输出到变量
- 17. Pycharm Python控制台不打印输出
- 18. 将打印输出写入文件(python)
- 19. python:加入前一行打印输出
- 20. Python的控制输出 “打印”
- 21. 打印Python输出的PHP代码
- 22. 如何打印Subprocess Python的输出?
- 23. 在csv文件中打印输出python
- 24. 使用Python打印输出到文件
- 25. 以HTML格式打印Python输出
- 26. 在excel中打印python脚本输出
- 27. 将python输出打印到html文件
- 28. 不显示打印输出在Python中
- 29. Python动态词典+打印html输出
- 30. 捕获输出打印在python
哪些代码正在写入控制台? Python代码或C++代码? – interjay
C++代码。我不希望Python代码写入控制台。谢谢。 – duffsterlp