我有一个设备返回一个string来响应写入设备文件的命令。 我能够写入命令到设备,并读取C中的返回string,代码如下所示:
int dev = open("/dev/USBDev251",O_RDWR); write(dev,data,sizeof(data)); read(dev,buff,16);
试图在python中做同样的事情:
dev = os.open("/dev/USBDev251",os.O_RDWR) os.write(dev, data) os.read(dev,16)
写入成功,但只返回一个空string。 我在这里错过了什么?
根据os.write
文档 :
注:该函数用于低级I / O,并且必须应用于由
os.open()
或pipe()
返回的os.open()
。 要写内置函数open()
或popen()
或fdopen()
或sys.stdout
或sys.stderr
返回的“文件对象”,请使用其write()
方法。
你不应该在这里混合和匹配。 如果使用全局函数open()
打开文件,则只能使用文件对象的read()
和write()
方法。 相反,如果使用os.open()
打开文件,则只能使用os.read()
和os.write()
。
所以,尝试用os.open()
替换你的调用open()
os.open()
; 或者,保持open()
调用,并用os.write(dev, ...)
替换os.write(dev, ...)
并用dev.write(...)
替换os.read(dev, ...)
dev.read(...)
。
添加一个os.lseek()来回溯到你写的字符串的开头。 目前,你写了16个字节的指针。 当你阅读时,你开始阅读当前的指针,所以你需要把它备份到你写的东西的开始。 这对我工作:
#!/usr/bin/python import os data = "xxxxxxxxxxxxxxxx" dev = os.open("/dev/sdp1", os.O_RDWR) os.write(dev,data) os.lseek(dev,0,os.SEEK_SET) print os.read(dev,16)