我正在將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