在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代码?
答案 0 :(得分:11)
我在查看如何进行USBDEVFS_RESET时遇到过这种情况,并认为我会分享我发现的关于_IO的内容: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
获取devnum
和lsusb
。
答案 1 :(得分:5)
ioctl-opt(pypi)是一个小python模块,它将所需的C预处理器宏转换为python。 有关简单用法示例,请参阅此hidraw实现。
请注意,可能需要定义ctype结构(取决于调用类型),因此您可以实际传递参数。
披露:我是两个模块的作者。
答案 2 :(得分:0)
宏USBDEVFS_RESET
在某个系统头文件中定义。
您可以搜索它并将termios.USBDEVFS_RESET
替换为实际值。