python處理ctype模組的輸出日誌

2021-10-23 07:24:54 字數 780 閱讀 8158

有乙個c動態庫以在stdout中寫入日誌條目。我正在使用ctypes庫在python應用程式中使用它。python應用程式使用logging庫來編寫日誌條目。

需要做的是捕獲共享庫的stdout條目,以便使用logging模組寫入日誌條目。換句話說,我想將c庫的stdout條目重定向到logging模組,這樣我就可以使用logging使用它的處理程式來寫入檔案和控制台。

先把stdout裝置備份,再把pipe管道設定為stdout,呼叫相關的程式,這樣就可以通過pipe拿到stdout日誌資訊,最後把stdout裝置還原。

# -*- coding: utf-8 -*-

import os

pipe_out, pipe_in = os.pipe(

)stdout = os.dup(1)

print

"stdout log"

# 標準輸出到檔案

os.dup2(pipe_in,1)

print

"pipe log"

# 標準輸出還原

os.dup2(stdout,1)

print

"stdout log2"

os.close(pipe_in)

r = os.fdopen(pipe_out)

# 輸出重定向日誌

print

(r.read())

r.close(

)

輸出結果,通過pipe讀出

參考:

python struct模組和ctypes模組

float 轉 16進製制 hex import struct deffloat to hex f return hex struct.unpack struct.pack f 0 一 二 一 python的struct模組 二 位元組順序大小對齊方式 函式 return explain pack ...

C與Python互動ctype方式記錄

python中封裝了ctype可以用來c與python之間的互動。在vs中選擇動態庫編譯可以將函式編譯成動態庫的形式。下面條件編譯是用來在c 中編譯c的函式,並且匯出成動態庫的。ifdef cplusplus define xext extern c else define xext endif i...

使用ctype在python中呼叫c

之前在python中呼叫c 是通過命令列呼叫的,引數傳遞是使用檔案io的形式,所以會特別慢 現在用ctypes,引數傳遞傳的只是記憶體中的指標,這就很舒服 現在來總結下如何使用cytpes在python中呼叫c ubuntu系統下 首先寫乙個test.c的原始碼 int add int a,int ...