以下是Linux中resetting a serial port的示例,我想翻译以下代码段

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的可能属性。有关此类termios属性的示例,另请参见fcntl documentation

如何将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()
您可以从busnum获取devnumlsusb
编辑:上面的链接已死,URL被替换为上一个存档版本。

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

10-14 18:16