代码之家  ›  专栏  ›  技术社区  ›  Zoli

Python在读行时进入无限循环

  •  0
  • Zoli  · 技术社区  · 7 年前

    我想用下面的代码读取DS18B20传感器数据:

    filepath = "/sys/bus/w1/devices/w1_bus_master1/w1_master_slaves"
    
    with open(filepath) as fp:
        sensor=fp.readline()
        while sensor:
            print("Sensor: {}".format(sensor.strip()))
            with open("/sys/bus/w1/devices/" + sensor.strip() + "/w1_slave") as fp1:
                sensor_data = fp1.read()
                print(sensor_data.strip())
        sensor=fp.readline()
    
    

    问题是,while循环从不走到下一行,而是一直在第一行循环。

    我错过了什么?

    另外,我对python一无所知,这是我的第一个python代码

    1 回复  |  直到 7 年前
        1
  •  1
  •   Austin    7 年前

    正如评论中所讨论的,问题是 sensor 永远不会在循环中更新。它不断循环第一次读取的值。这可以通过缩进代码的最后一行来纠正。

    我建议使用 for 环当我们简单地迭代文件处理程序时,我们迭代文件中的行。

    with open(filepath) as fp:
        for sensor in fp:
            print("Sensor: {}".format(sensor.strip()))
            with open("/sys/bus/w1/devices/" + sensor.strip() + "/w1_slave") as fp1:
                sensor_data = fp1.read()
                print(sensor_data.strip())
    
        2
  •  1
  •   Mahrez BenHamad    7 年前

    因为传感器在回路中没有改变,所以试试这个

    filepath = "/sys/bus/w1/devices/w1_bus_master1/w1_master_slaves"
    
    with open(filepath) as fp:
        sensor = fp.readline()
            while (sensor):
                print("Sensor: {}".format(sensor.strip()))
                with open("/sys/bus/w1/devices/" + sensor.strip() + "/w1_slave") as fp1:
                    sensor_data = fp1.read()
                    print(sensor_data.strip())
                sensor=fp.readline()
    
    推荐文章