Python пока входит в бесконечный цикл при чтении строк - PullRequest
0 голосов
/ 09 марта 2019

Я хочу прочитать данные датчика 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 никогда не переходит на следующую строку, продолжает цикл на первой.

Что мне здесь не хватает?

PS.Я полностью новичок в Python, это мой самый первый код на Python

Ответы [ 2 ]

1 голос
/ 09 марта 2019

Как обсуждалось в комментариях, проблема в том, что 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())
1 голос
/ 09 марта 2019

Это потому, что датчик не изменяется в контуре, попробуйте это

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()
...