gpt4 book ai didi

python - 如何正确地将 C ioctl 调用转换为 python fcntl.ioctl 调用?

转载 作者:太空狗 更新时间:2023-10-29 20:42:30 48 4
gpt4 key购买 nike

resetting a serial port 为例在 Linux 中,我想翻译以下片段

fd = open(filename, O_WRONLY);
ioctl(fd, USBDEVFS_RESET, 0);
close(fd);

转换为有效的 Python 代码。这是我到目前为止尝试过的方法

file_handler = open(self._port, 'w')
fcntl.ioctl(file_handler, termios.USBDEVFS_RESET)
file_handler.close()

以错误结束 'module' object has no attribute 'USBDEVFS_RESET'termios documentation在这一点上不是很有帮助,因为它没有列出 termios 的可能属性。另见 fcntl documentation此类 termios 属性的示例。

如何将 C 代码正确“转换”为 python2.7 代码?

最佳答案

我在查看如何执行 USBDEVFS_RESET 时遇到了这个问题,并认为我会分享我对 _IO 的发现:https://web.archive.org/web/20140430084413/http://bugcommunity.com/wiki/index.php/Develop_with_Python#Introduction_to_ioctl_calls_in_python

所以,到目前为止,我有以下内容:

from fcntl import ioctl

busnum = 1
devnum = 10

filename = "/dev/bus/usb/{:03d}/{:03d}".format(busnum, devnum)

#define USBDEVFS_RESET _IO('U', 20)
USBDEVFS_RESET = ord('U') << (4*2) | 20

fd = open(filename, "wb")
ioctl(fd, USBDEVFS_RESET, 0)
fd.close()

您可以从lsusb 获取busnumdevnum

编辑:上面的链接已经失效,URL 被替换为最后一个存档版本。

关于python - 如何正确地将 C ioctl 调用转换为 python fcntl.ioctl 调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14626395/

48 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com