2016-01-16 2 views
3

Я пытаюсь получить скрипт python для чтения содержимого текстового файла, и если это 21, включите светодиод, но если это 20, выключите его. Сценарий также распечатывает содержимое текстового файла на экране.Файл для чтения python для включения светодиода

Содержимое распечатывает все нормально, но светодиод не включается.

import wiringpi2 
import time 

wiringpi2.wiringPiSetupGpio() 
wiringpi2.pinMode(17,1) 

while 1: 
    fh=open("test1.txt","r") 
    print fh.read() 
    line = fh.read() 
    fh.close() 
    if line == "21": 
     wiringpi2.digitalWrite(17,1) 
    elif line == "20": 
     wiringpi2.digitalWrite(17,0) 
    time.sleep(2) 
+0

Я думаю, что закрытие файла перед 'if' вызывает проблему –

+1

Также вы можете использовать [contextmanager] (http://preshing.com/20110920/the-python-with-statement-by-example/), чтобы прочитать файл. – karlson

+0

Я пробовал с этим снял и до сих пор не работает – user2669997

ответ

2
print fh.read() 

считывает все содержимое файла, оставляя файл курсор в конец файла, поэтому, когда вы делаете

line = fh.read() 

там нечего читать.

Изменить это:

fh=open("test1.txt","r") 
print fh.read() 
line = fh.read() 
fh.close() 

к этому:

fh=open("test1.txt","r") 
line = fh.read() 
print line 
fh.close() 

Я не могу проверить этот код, так как я не имею Raspberry Pi, но код будет гарантировать, что line содержит все содержимое текстового файла. Это может быть не очень желательно: если файл содержит любые пробелы, например пробелы или символы новой строки, то ваши тесты if ... else не будут вести себя так, как вы хотите. Вы можете исправить это, выполнив

line = line.strip() 

после line = fh.read()

Метод .strip срывает любые начальные или конечные пробелы. Вы также можете передать ему аргумент, чтобы рассказать ему, что делать, см. the docs.

+0

Это работает спасибо, теперь я могу продолжить свое обучение – user2669997