jjzjj

python - 使用 ctypes 捕获 c++ 共享库日志条目

我有一个带有c接口(interface)的cplusplus共享库,它在标准输出中写入日志条目。我在使用ctypes库的python应用程序中使用它。python应用程序使用logging库来写入日志条目。我需要做的是捕获共享库的标准输出条目以使用logging模块写入日志条目。换句话说,我想将c库的stdout条目重定向到logging模块,这样我就可以使用logging来使用它的处理程序写入文件和控制台。我发现可以捕获标准输出(seethisSOquestion),但我只能在c模块调用结束时访问它,因此它对日志记录没有用。我想要一种无阻塞的方式来访问标准输出条目。一个最小的例子如下

python - 如何将 BitString 转换为 ctypes 字节数组?

我刚开始使用BitString和ctypes,我有一个二进制文件的一部分存储在startdata中,一个BitArray类。>print(startdata)0x0000000109f0000000010605ffff现在,我必须按原样将这些数据传递给一个以unsignedchar*作为参数的C函数,所以我首先尝试做这样的事情:buf=(c_ubyte*len(startdata))()最终做到这一点:buf_ptr=cast(pointer(buf),POINTER(c_ubyte))这行得通,但是如何将字节数据从startdata分配到我刚刚创建的数组/缓冲区?这行不通:>buf=

python - 如何将 char 指针从 python 传递给 C++ API?

我正在尝试从我的python代码中调用以下C++方法:TESS_APITessResultRenderer*TESS_CALLTessTextRendererCreate(constchar*outputbase){returnnewTessTextRenderer(outputbase);}我对如何将指针传递给方法有困难:遵循正确的方法吗?textRenderer=self.tesseract.TessTextRendererCreate(ctypes.c_char)或者我应该这样做:outputbase=ctypes.c_char*512textRenderer=self.tess

c++ - cout 是否保证有 ctype<char> 刻面?

给定:autofoo="ABCDEFGHIJKLMNOPQRSTUVWXYZ"s我可以通过以下方式将所有字符转换为小写:use_facet>(cout.getloc()).tolower(data(foo),next(data(foo),foo.size()));LiveExample但这取决于cout.getloc()包含ctypefacet.假设我使用的是未修改的cout我可以假设cout.getloc()将包含facetctype还是我需要在使用前确认这一点:has_facet>(cout.getloc()) 最佳答案 来自c

python - 使用 Python Ctypes 和 C++ 时如何解决段错误?

假设我在C++中有以下两个函数签名:BYTE*init(BYTE*Options,BYTE*Buffer)和:intnext(BYTE*interface,BYTE*Buffer)我的想法是,我首先在C++中初始化一个Interface类,然后从Python调用next函数,并引用该类。第一个函数通过以下方式返回指向接口(interface)的BYTE指针:Interface*interface;//initializestuffreturn((BYTE*)interface);我在Python中这样调用它:classFoo:definit(self,data):#leftout:se

c++ - 如何使用 Python 2.7.2 将 C++ 枚举转换为 ctypes.Structure?

我找了又找,但我还没有找到一个可以完成我需要做的事情的例子。我发现HowcanIrepresentan'Enum'inPython?在这里,但它不包括ctypes.Structure。我还发现Usingenumsinctypes.Structure在这里,但它包含我不熟悉的指针。我有一个包含typedef枚举的头文件,我需要在Python文件的ctypes.Structure中使用它。C++头文件:typedefenum{ID_UNUSED,ID_DEVICE_NAME,ID_SCSI,ID_DEVICE_NUM,}id_type_et;Python文件(我目前使用的方式):class

c++ - ctypes python std::字符串

我正在使用C++作为后端使用ctypes。现在在C++中有这样一个函数:voidHandleString(std::stringsomething){...}我想知道如何从python调用这个函数-没有ctype(c_char_p显然不会工作)来向这个函数发送一个字符串参数......我怎样才能解决这个问题并将一个字符串从Python传递到C++(并将参数更改为char*一些不是和选项)PS我可以创建这样的解决方法吗?将python字符串作为c_char_p发送到将char*转换为std::string的C++函数以某种方式返回字符串或其指针???!!(如何?)到python将它从py

c++ - 从 C++ 修改 python 列表

我得到了一个Python列表,我可以获取它的指针并将该指针地址传递给C++以进行处理MyPointer=TheList.as_pointer()现在我使用ctypes将这个地址传递给C++在C++中,我可以执行以下操作:*(float*)MyPointer=2.0f;//forexamplePython值会立即更新,现在的问题是:如何扩展或删除一些值(比如直接从C++修改列表)因为我感觉到这些数据是一个std::vector如何做push_back等等以快速调整大小(因为在Python中迭代非常慢) 最佳答案 仅给定该指针,您无法扩

c++ - 如何使用 ctypes 从 C++ 函数返回对象?

我有两个C++类,Container和Item,它们看起来像:classItem{public:Item(std::string*name,intid);std::string*getName();private:std::string*name;intid;};classContainer{public:Container();Item*getItem(intid);private:std::vectoritems;};我想在Python中创建和使用Container,所以我写了一个C接口(interface)来编译一个共享库:extern"C"{Container*Containe

python - 如何使用 boost.python 将预填充的 "unsigned char*"缓冲区传递给 C++ 方法?

我有一个C++类,它有一个成员函数,它接受一个unsignedchar*缓冲区和一个unsignedint长度作为参数并对它们进行操作。我已经用Boost::Python包装了这个类,并希望将一个预填充的缓冲区从Python脚本传递给这个类。Python端缓冲区是使用struct.pack创建的。我不知道如何使参数类型匹配并不断收到Boost.Python.ArgumentError。include/Example.h#ifndefEXAMPLECLASS_H_#defineEXAMPLECLASS_H_#includeclassExampleClass{public:ExampleC