Articles of ctypes

Python的ctypes从Linux上的libc调用reboot()

我试图通过ctypes从Python中的libc调用rebootfunction,我只是不能得到它的工作。 我一直在引用man 2 reboot页面( http://linux.die.net/man/2/reboot )。 我的内核版本是2.6.35。 下面是来自交互式Python提示符的控制台日志,我试图让我的机器重启 – 我做错了什么? 为什么不是ctypes.get_errno()工作? >>> from ctypes import CDLL, get_errno >>> libc = CDLL('libc.so.6') >>> libc.reboot(0xfee1dead, 537993216, 0x1234567, 0) -1 >>> get_errno() 0 >>> libc.reboot(0xfee1dead, 537993216, 0x1234567) -1 >>> get_errno() 0 >>> from ctypes import c_uint32 >>> libc.reboot(c_uint32(0xfee1dead), c_uint32(672274793), c_uint32(0x1234567), c_uint32(0)) -1 >>> get_errno() 0 >>> libc.reboot(c_uint32(0xfee1dead), c_uint32(672274793), […]

Python的ctypes不加载在Mac OS X的dynamic库

我有一个C ++库repeater.so ,我可以在Linux中从Python加载以下方式: import numpy as np repeater = np.ctypeslib.load_library('librepeater.so', '.') 但是,当我在Mac OS X(Snow Leopard,32位)上编译相同的库并获得repeater.dylib ,然后在Python中运行以下代码: import numpy as np repeater = np.ctypeslib.load_library('librepeater.dylib', '.') 我得到以下错误: OSError: dlopen(/mydir/librepeater.dylib, 6): no suitable image found. Did find: /mydir/librepeater.dylib: mach-o, but wrong architecture 在Mac OS X上,我是否需要做一些不同的工作才能在Python中加载dynamic库?

python ctypes和sysctl

我有以下代码 import sys from ctypes import * from ctypes.util import find_library libc = cdll.LoadLibrary(find_library("c")) CTL_KERN = 1 KERN_SHMMAX = 34 sysctl_names = { 'memory_shared_buffers' : (CTL_KERN, KERN_SHMMAX), } def posix_sysctl_long(name): _mem = c_uint64(0) _arr = c_int * 2 _name = _arr() _name[0] = c_int(sysctl_names[name][0]) _name[1] = c_int(sysctl_names[name][1]) result = libc.sysctl(_name, byref(_mem), c_size_t(sizeof(_mem)), None, c_size_t(0)) if […]

ctypes加载具有依赖关系的ac共享库

在Linux上,我有一个交stream共享库,依赖于其他库。 LD_LIBRARY_PATH已正确设置为允许链接器加载所有库。 当我做: libgidcwf = ctypes.cdll.LoadLibrary(libidcwf_path) 我得到以下错误: Traceback (most recent call last): File "libwfm_test.py", line 12, in <module> libgidcwf = ctypes.cdll.LoadLibrary(libidcwf_path) File "/usr/lib/python2.5/ctypes/__init__.py", line 431, in LoadLibrary return self._dlltype(name) File "/usr/lib/python2.5/ctypes/__init__.py", line 348, in __init__ self._handle = _dlopen(self._name, mode) OSError: path-to-my-lib/libwav.so: undefined symbol: ODBCGeneralQuery 看来LD_LIBRARY_PATH在这里没有效果。 有没有办法让这些依赖库“可载入”? 先谢谢您的帮助。

我怎样才能find一个名称的过程,并使用ctypes杀死?

在Windows上,我想通过'exename.exe'的名字find一个进程,然后杀掉它。 我怎样才能通过ctypes而不是其他的第三方模块?

IO完成端口密钥混淆

我正在使用ctypes模块在Python中使用Windows DLL API编写基于IO完成端口的服务器( 源代码 )。 但这是对API的直接使用,这个问题针对那些掌握IOCP知识的人,而不是Python。 正如我理解的CreateIoCompletionPort的文档,你指定你的“用户定义的”完成键,当你用一个文件句柄(在我的情况下是一个套接字)与创build的IOCP关联调用此函数。 当你开始调用GetQueuedCompletionStatus时,你会得到一个完成键值和一个指向重叠对象的指针。 完成键应该确定重叠的对象和请求已经完成。 但是,假设我在CreateIoCompletionPort调用中使用重叠对象传入100作为完成键。 当相同的重叠对象的IO完成并且通过GetQueuedCompletionStatus返回时,它所附带的完成键要大得多,并且与原始值100毫不相似。 我误解完成密钥是如何工作的,还是我在上面链接的源代码中做错了?

用Python获取电池容量Windows

我正在考虑目前的电池容量和devise容量​​。 到目前为止,我可以使用的是使用Win32_Battery()类 ,它不提供我需要的所有信息(至less不是我的系统)。 我使用了纯Python的wmi库 。 另一方面,我发现这在Python中的作品,我怎么能检测到电脑是否在电池供电? ,但不幸的是它并没有提供有关容量的任何信息。 电池信息结构和电池状态结构似乎是完美的。 现在我知道我必须使用DeviceIoControl函数来完成这个工作,并且我发现这个C ++代码可以解释一点。 我宁愿只是简单地使用ctypes而不是pywin32提供的python win32api。 如果你有一个想法如何在Python中做到这一点,请让我知道! 提前致谢。

如何在python中使用带SHGFI_PIDL的SHGetFileInfo

我试图使用SHGetFileInfo检索文件信息(特别是有关图标的信息)。 实际上,我没有文件的完整path,我只有pidl。 下面的代码返回(0L, (0, 0, 0, '', '')) ,我的问题是为什么。 from win32com.shell import shell, shellcon def get_info(): desktop = shell.SHGetDesktopFolder() eaten, desktop_pidl, attr = desktop.ParseDisplayName(None, None, r"C:\Users\Ella\Desktop") return shell.SHGetFileInfo(desktop_pidl, 0, shellcon.SHGFI_PIDL | shellcon.SHGFI_SYSICONINDEX | shellcon.SHGFI_ICON | shellcon.SHGFI_DISPLAYNAME) 另一方面,下面的代码确实有效(它使用完整path而不是pidl): from win32com.shell import shell, shellcon def get_info2(): return shell.SHGetFileInfo(r"C:\Users\Ella\Desktop", 0, shellcon.SHGFI_SYSICONINDEX | shellcon.SHGFI_ICON | shellcon.SHGFI_DISPLAYNAME) 谢谢!

从Python更改Windows背景

有没有人知道一种方式来改变Windows桌面壁纸与python,这样的变化是永久的? 我find了这个代码 import ctypes SPI_SETDESKWALLPAPER = 20 ctypes.windll.user32.SystemParametersInfoA(SPI_SETDESKWALLPAPER, 0, "myimage.jpg" , 0) 此代码有效,但是一旦您注销并再次login,背景将回到原始图像。 我更喜欢一个不需要任何registry编辑的解决scheme,如果可能的话,我希望能在Windows XP和7上运行。

当调用gcc编译的dll返回一个结构时,ctypes cdecl给出了4个字节

我有ac库(花栗鼠),我想打电话使用ctypes。 但是,它返回一个结构的函数失败? 我得到的错误是 File "qw.py", line 19, in <module> b = cpBBNew3(1,2,3,4) ValueError: Procedure called with not enough arguments (4 bytes missing) or wrong calling convention 这是(相关的)c代码:在cpBB.h中 typedef struct cpBB { cpFloat l, b, r ,t; } cpBB; cpBB cpBBNew3(cpFloat l, cpFloat b, cpFloat r, cpFloat t); 在cpBB.c cpBB cpBBNew3(cpFloat l, cpFloat b, cpFloat r, […]