Python 从字符设备读取空字节数组

问题描述

我在一台在 Debian 下运行的工业 PC 上得到了一个用于某些 gpio 的字符设备。

在 C 中阅读效果很好

#include <stdio.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>

int main (int argc,char **argv) {
    int fd;
    fd = open("/dev/bsw_gpio",O_RDWR);
    if (fd == -1) {
        printf("Could not open device");
        return 1;
    }
    unsigned char val;
    int ret;
    ret = read(fd,&val,sizeof(val));
    if (ret == 0)
        printf("Value : %d\n",val);
    else
        printf("No val read\n");

    if(close(fd) != 0) {
        printf("Could not close file");
    }
    
    return 0;
}

编辑

我忘了;这让我获得了两个 io 引脚的状态作为 0 到 3 之间的值并且运行良好..但我需要在 Python 中执行此操作。

Python 是这样反应的

>>> import os
>>> fp = os.open("/dev/bsw_gpio",os.O_RDWR)
>>> os.read(fp,1)
b''

或者,使用正常打开:

>>> with open('/dev/bsw_gpio','r+b',buffering=0) as fp:
...     fp.read()
... 
b''

我该如何解决这个问题?

解决方法

我发现我需要读入一个固定大小的字节数组。由于我需要在之后转换为 int,所以我只使用了一个 2 个字节的数组,将其反转并现在具有正确的值。

class DigitalIO():
   
    def __init__(self):
        '''
        öffne die Datei
        '''
            
        self.file = open(DigitalIO.FILENAME,'r+b',0)
    
    def read_value(self):
        '''
        lies einen Wert
        '''
        val = bytearray(2)
        self.file.readinto(val)
        val.reverse()
        return int(val.hex(),16)

    def write_value(self,value):
        '''
        schreibe einen Wert
        '''
        self.file.write(value.to_bytes(1,'little'))