有乙個c動態庫以在stdout中寫入日誌條目。我正在使用ctypes庫在python應用程式中使用它。python應用程式使用logging庫來編寫日誌條目。先把stdout裝置備份,再把pipe管道設定為stdout,呼叫相關的程式,這樣就可以通過pipe拿到stdout日誌資訊,最後把stdout裝置還原。需要做的是捕獲共享庫的stdout條目,以便使用logging模組寫入日誌條目。換句話說,我想將c庫的stdout條目重定向到logging模組,這樣我就可以使用logging使用它的處理程式來寫入檔案和控制台。
# -*- 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 ...