通过内省打印 ctypes“Structure”的所有字段

2024-03-17

test.c:

#include <stdio.h>
#include <stdlib.h>

struct s {
    char a;
    int b;
    float c;
    double d;
};

struct s *create_struct()
{
    struct s *res = malloc(sizeof(struct s));
    res->a = 1; res->b = 2; res->c = 3.0f; res->d = 4.0;
    return res;
}

test.py:

from ctypes import *

class S(Structure):
    _fields_ = [
        ('a', c_byte),
        ('b', c_int),
        ('c', c_float),
        ('d', c_double)
    ]

lib = CDLL('./test.so')

create_struct = lib.create_struct
create_struct.restype = POINTER(S)
create_struct.argtypes = []

s_ptr = create_struct()
s = s_ptr.contents

print s._fields_[0][0], s.a
print s._fields_[1][0], s.b
print s._fields_[2][0], s.c
print s._fields_[3][0], s.d
print s.__dict__

output:

a 1
b 2
c 3.0
d 4.0
{}

我想调整上面的 python 脚本来打印我的 s 结构的每个字段,而不必为每个字段显式执行。据我了解,这可以使用 __dict__ 属性来完成,但我的属性是空的。对于扩展 ctypes.Structure 的类,有什么方法可以做到这一点?


怎么样使用getattr http://docs.python.org/2/library/functions.html#getattr?

>>> from ctypes import *
>>>
>>> class S(Structure):
...     _fields_ = [
...         ('a', c_byte),
...         ('b', c_int),
...         ('c', c_float),
...         ('d', c_double)
...     ]
...
>>> s = S(1, 2, 3, 4.0)
>>>
>>> for field_name, field_type in s._fields_:
...     print field_name, getattr(s, field_name)
...
a 1
b 2
c 3.0
d 4.0

UPDATE

如果结构体(或联合体)中有位域,则迭代_fields_产生一个包含 3 个项目的元组,这将导致ValueError。为了防止这种情况,您需要调整代码:

...

for field in s._fields_:
    print field[0], getattr(s, field[0])
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过内省打印 ctypes“Structure”的所有字段 的相关文章

  • 分配列表的多个值

    我很想知道是否有一种 Pythonic 方式将列表中的值分配给元素 为了更清楚 我要求这样的事情 myList 3 5 7 2 a b c d something myList So that a 3 b 5 c 7 d 2 我正在寻找比手
  • 为什么 pandas 在简单的数学运算上比 numpy 更快?

    最近 我观察到 pandas 的乘法速度更快 我在下面的例子中向您展示了这一点 如此简单的操作怎么可能做到这一点 这怎么可能呢 pandas 数据帧中的底层数据容器是 numpy 数组 测量 我使用形状为 10k 10k 的数组 数据框 i
  • 如何在 QTableView 标题中单击鼠标右键单击上下文菜单?

    下面的示例代码 很大程度上受到here http www saltycrane com blog 2007 12 pyqt 43 qtableview qabstracttablemodel 有一个右键单击上下文菜单 当用户单击表中的单元格
  • 高效地将大型 Pandas 数据帧写入磁盘

    我正在尝试找到使用 Python Pandas 高效地将大型数据帧 250MB 写入磁盘或从磁盘写入的最佳方法 我已经尝试了所有方法Python 数据分析 但表现却非常令人失望 这是一个更大项目的一部分 该项目探索将我们当前的分析 数据管理
  • minAreaRect OpenCV 返回的裁剪矩形 [Python]

    minAreaRectOpenCV 中返回一个旋转的矩形 如何裁剪矩形内图像的这部分 boxPoints返回旋转矩形的角点的坐标 以便可以通过循环框内的点来访问像素 但是在 Python 中是否有更快的裁剪方法 EDIT See code在
  • 如何使用 python、openCV 计算图像中的行数

    我想数纸张 所以我正在考虑使用线条检测 我尝试过一些方法 例如Canny HoughLines and FLD 但我只得到处理过的照片 我不知道如何计算 有一些小线段就是我们想要的线 我用过len lines or len contours
  • 检查子字符串是否在字符串列表中?

    我之前已经找到了这个问题的一些答案 但它们对于当前的Python版本来说似乎已经过时了 或者至少它们对我不起作用 我想检查字符串列表中是否包含子字符串 我只需要布尔结果 我找到了这个解决方案 word to check or wordlis
  • django 中的身份验证方法返回 None

    你好 我在 django 中做了一个简单的注册和登录页面 当想要登录时 登录视图中的身份验证方法不返回任何内容 我的身份验证应用程序 模型 py from django db import models from django contri
  • 错误:尝试使用 scrappy 登录时出现 raise ValueError("No element found in %s" % response)

    问题描述 我想从我大学的bbs上抓取一些信息 这是地址 http bbs byr cn http bbs byr cn下面是我的蜘蛛的代码 from lxml import etree import scrapy try from scra
  • 我可以在 if 语句中使用“as”机制吗

    是否可以使用as in if类似的声明with我们使用的 例如 with open tmp foo r as ofile do something with ofile 这是我的代码 def my list rtrn lst True if
  • 操作错误:尝试在 ubuntu 服务器中写入只读数据库

    我正在使用 FlaskApp 运行mod wsgi and apache2在 Ubuntu 服务器上 我尝试运行烧瓶应用程序localhost成功 然后部署到ubuntu服务器上 但是当我尝试更新数据库时 出现错误 Failed to up
  • 异步异常处理程序:在事件循环线程停止之前不会被调用

    我正在我的异步事件循环上设置异常处理程序 但是 在事件循环线程停止之前 它似乎不会被调用 例如 考虑以下代码 def exception handler loop context print Exception handler called
  • 使用 Sphinx 时,如何记录没有文档字符串的成员?

    我正在为我发布的包编写文档 我发现您的文档越全面 人们就越容易找到您的包来使用 废话 实际上 我在充满爱心地编写代码的所有功能和细节方面获得了很多乐趣 然而 我对如何为类级变量编写与 Sphinx 兼容的文档感到完全困惑 特别是 我有一些e
  • Python RE(总之检查第一个字母是否区分大小写,其余部分不区分大小写)

    在下面的情况下 我想匹配字符串 Singapore 其中 S 应始终为大写 其余单词可能为小写或大写 但在下面的字符串 s 是小写的 它在搜索条件中匹配 任何人都可以让我知道如何实施吗 import re st Information in
  • 在不同的 GPU 上同时训练多个 keras/tensorflow 模型

    我想在 Jupyter Notebook 中同时在多个 GPU 上训练多个模型 我正在使用 4GPU 的节点上工作 我想将一个 GPU 分配给一个模型并同时训练 4 个不同的模型 现在 我通过 例如 为一台笔记本选择 GPU import
  • 使用 Numpy 进行多维批量图像卷积

    在图像处理和分类网络中 一个常见的任务是输入图像与一些固定滤波器的卷积或互相关 例如 在卷积神经网络 CNN 中 这是一种极其常见的操作 我已将通用版本任务减少为 Given 一批 N 个图像 N H W D 和一组 K 个滤镜 K H W
  • 如何在supervisord中设置组?

    因此 我正在设置 Supervisord 并尝试控制多个进程 并且一切正常 现在我想设置一个组 以便我可以启动 停止不同的进程集 而不是全部或全无 这是我的配置文件的片段 group tapjoy programs tapjoy game1
  • 为什么我的 PyGame 应用程序根本不运行?

    我有一个简单的 Pygame 程序 usr bin env python import pygame from pygame locals import pygame init win pygame display set mode 400
  • python 日志记录替代方案 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 蟒蛇记录模块 http docs python org library logging html使用起来
  • 正则表达式 - 匹配不包含字符串的模式

    我对正则表达式很陌生 并且一直在寻找方法来做到这一点 但没有成功 给定一个字符串 我想删除以 abc 开头 以 abc 结尾且中间不包含 abc 的任何模式 如果我做 abc abc abc 它将匹配以 b 开头 以 abc 结尾并且中间包

随机推荐

  • mysql 5.7在中型sql中比mysql 5.6慢很多

    我们正在升级到 mysql 5 7 只是发现它比 5 6 版本慢得多 虽然两者具有几乎相同的配置 但 5 6 版本以毫秒为单位执行大部分 sql 而另一个版本则需要大约 1 秒或更长的时间来执行中等复杂的 sql 例如下面的 SQL Get
  • flask_sqlalchemy create_all 无需导入模型

    我想了解如何设置一个独立的脚本来调用create all无需将我的所有模型导入其中 以下是相关文件 db py from flask sqlalchemy import SQLAlchemy db SQLAlchemy test model
  • 获取 mysqldump 转储适合 psql 输入的数据(转义单引号)

    我正在尝试将数据库从 MySQL 移植到 PostgreSQL 我已经在 Postgres 中重建了架构 所以我需要做的就是获取数据 而不需要重新创建表 我可以使用迭代所有记录并一次插入一条记录的代码来完成此操作 但我尝试了这一点 但对于我
  • 默认使用哪个 Google 地图 API 版本?

    如果您不指定版本号 则使用哪个版本的 Google Maps API 也许是最新的发行版本 这有关版本控制的文档 https developers google com maps documentation javascript basic
  • Python - 释放/替换字符串变量,如何处理?

    假设我将密码以纯文本形式存储在名为的变量中passWd作为字符串 一旦我放弃这个变量 python如何释放它 例如 使用del passWd or passWd new random data 字符串是否存储为字节数组 这意味着它可以在最初
  • 类库和命名空间有什么区别?

    类库和命名空间之间的实际区别是什么 我知道两者都用于将类 命名空间等分组在一起 任何人都可以告诉我在哪种情况下应该使用类库以及何时创建新的命名空间 命名空间为类提供了概念上的分离 类库提供了物理上的分离 在 Windows 中认为是独立的
  • 导入错误:没有名为 model_selection 的模块

    我正在尝试使用train test split函数并写 from sklearn model selection import train test split 这导致 ImportError No module named model s
  • 在facet_wrap中绘制平均线

    我有以下数据集 structure list Geschaeft c 0 0961028525512254 0 0753516756309475 0 0 0722803347280335 0 0 000877706260971328 Gas
  • Pandaboard 交叉编译 Qt

    我花了几周的时间尝试为我的 Panda 板交叉编译 Qt 但没办法 我无法通过 configure 如果有人能给我帮助 我将不胜感激 我的主机系统是Ubuntu 13 04 86 64位 在Virtualbox中运行 我的目标系统是 Pan
  • Python 中的舍入是如何工作的?

    我对 Python 中舍入的工作原理有点困惑 有人能解释一下为什么Python会这样吗 Example gt gt gt round 0 05 1 this makes sense 0 1 gt gt gt round 0 15 1 thi
  • 转换文件:Android 中的 Uri 到文件

    转换的最简单方法是什么android net Uri https developer android com reference android net Uri持有一个对象file 键入一个java io File https develo
  • “在源 Y 中找不到事件 ID X 的描述。”

    我正在尝试将自定义事件从我的 Web 应用程序写入 Windows 事件日志 我没有运气让消息字符串正常工作 我不断收到 无法找到源 Y 中事件 ID X 的描述 为了缩小范围 我决定将一个事件写入我的机器上已存在的源 我只是查看了已经写出
  • Nginx 配置中静态位置的多个位置

    我的应用程序将在两个位置提供静态文件 一个是 my path project static 另一个是 my path project jsutils static 我很难让网络服务器在两个目录中查找静态内容 这是我的应用程序的 nginx
  • UICollectionView 动画(插入/删除项目)

    我想在插入和 或删除 UICollectionViewCell 时自定义动画样式 我需要这个的原因是 默认情况下 我看到插入单元格的动画具有平滑的淡入淡出效果 但是删除单元格具有向左移动 淡出动画的组合 如果不是因为一个问题 我会对此感到非
  • 使用具有多个比较器的比较器

    我可以使用此代码中的所有简单比较器进行排序 但不能ComplexComparator 我不知道如何编码才能使其正常工作 任何建议 解释将不胜感激 这是我的主要程序 package pkgTest import java util Array
  • 如何使用 Elasticsearch 编写条件查询?

    我有一个简单的 Elasticsearch JSON 查询 如下所示 query bool must match id 1 must match tags name a1 仅当值 本例中为 a1 不为空时 如何执行第二个 必须 条件 您可以
  • IBM Blockchain Marble 演示中的交易存储在哪里?

    我正在运行下面链接中提到的 IBM 提供的区块链演示 https github com IBM Blockchain marbles https github com IBM Blockchain marbles 我在一个 Linux 系统
  • 如何从 Firestore 查询中排除元素?

    我有一个用户集合 我想从数据库中查询所有用户并将它们显示在RecyclerView除了一个 mine 这是我的数据库架构 users collection uid document uid fR5bih7SysccRu2Gu9990TeSS
  • 如何像对象一样操作Json响应?

    我的 jQuery ajax 返回 JSon 对象 我首先阅读了其他文章 但他们的回复文字不喜欢我的 我的回复内容 来自萤火虫响应 item country USA lan EN country Turkiye lan TR 现在我试图提醒
  • 通过内省打印 ctypes“Structure”的所有字段

    test c include