python - 如何从命令行在 Python 中初始化 ctypes 数组
问题描述
因此,我的任务是编写一个 Python 脚本,该脚本访问 Win 32 DLL 以执行某些功能。该脚本需要从命令行接受参数,然后输出其他参数。
我正在使用 ctypes,因为它是我发现将参数传递给 Win 32 DLL 方法的最简单方法,但我很幸运能够从命令行获得一个固定的值数组,我通过这样做解决了这个问题:
seed = (ctypes.c_ubyte * 12)(
ctypes.c_ubyte(int(sys.argv[3], 16)), ctypes.c_ubyte(int(sys.argv[4], 16)),
ctypes.c_ubyte(int(sys.argv[5], 16)), ctypes.c_ubyte(int(sys.argv[6], 16)),
ctypes.c_ubyte(int(sys.argv[7], 16)), ctypes.c_ubyte(int(sys.argv[8], 16)),
ctypes.c_ubyte(int(sys.argv[9], 16)), ctypes.c_ubyte(int(sys.argv[10], 16)),
ctypes.c_ubyte(int(sys.argv[11], 16)), ctypes.c_ubyte(int(sys.argv[12], 16)),
ctypes.c_ubyte(int(sys.argv[13], 16)), ctypes.c_ubyte(int(sys.argv[14], 16))
)
但这无论如何都不是动态的,我尝试在数组初始化中使用 for 循环执行此数组初始化,但没有成功。
我对 Python 完全陌生,发现用其他语言完成我认为简单的任务相当困难(不是抨击该语言,只是觉得它不像其他语言那样直观)。
那么,有没有办法简化这个数组的初始化,因为它本身可能有可变数量的条目?
我已经搜索和搜索,但没有找到解决我的问题。
所有正面和负面的评论都会受到赞赏,两者都将始终作为学习经验:)
解决方案
从您的示例看来,您有 14 个参数,最后 12 个是十六进制字节。
import ctypes
import sys
# Convert parameters 3-14 from hexadecimal strings to integers using a list comprehension.
L = [int(i,16) for i in sys.argv[3:15]]
# Initialize a byte array with those 12 parameters.
# *L passes each element of L as a separate parameter.
seed = (ctypes.c_ubyte * 12)(*L)
推荐阅读
- git - 通过单个 SSH 会话进行多个远程 git 操作?
- laravel - 如何将 sass 和 less 文件与 laravel-mix 正确组合?
- xml - Intellij 的想法 - 任何将 xml bean 转换为 spring 的 autowiing 注释的工具?
- python - 如何从 TensorFlow 中的这些张量中提取值?
- css - 使用 makeStyles 在另一个选定的类中嵌套类
- python - Django:我们可以在 DRF 中强制执行 POST 请求而不需要 csrftoken 吗?
- python - 使用 AWS Lambda 函数从 EC2 实例中检索信息
- c# - 雪花数据库:在 COPY INTO 语句中使用 VALIDATION_MODE 从外部阶段加载 JSON 文件
- ruby-on-rails - 生成新版本的 all.js 以反映 application.js 的变化:Rails 3.2.12 如何编译 all.js?
- json - 如何使用“require”在 NestJS 控制器中导入 JSON?