Обновление хранимой информации в Python - PullRequest
0 голосов
/ 30 сентября 2018

Я работаю на устройстве pi, которое отображает IP-адрес на ЖК-экране.Код работает по большей части.Это повторяется через автоматизированные процессы в linux (демон cron).Это работает достаточно хорошо, однако информация ip не обновляется при повторении сценария.Я посмотрел здесь и в Интернете о том, как очистить сохраненные строки, но я застрял.Пожалуйста, кто-нибудь может помочь.

вот основная часть кода.

#!/usr/bin/python
import time
import sys
import Adafruit_CharLCD as LCD

from Adafruit_CharLCD import Adafruit_CharLCD
from subprocess import *
from time import sleep, strftime
from datetime import datetime

cmd = "ip -4 addr show wlan0 | grep inet | awk '{print $2}' | cut -d/ -f1"

cmd2 = "ip -4 addr show eth0 | grep inet | awk '{print $2}' | cut -d/ -f1"

def run_cmd(cmd):
    p = Popen(cmd, shell=True, stdout=PIPE)
    output = p.communicate()[0]
    return output

lcd_rs        = 25  
lcd_en        = 24
lcd_d4        = 23
lcd_d5        = 17
lcd_d6        = 18
lcd_d7        = 22
lcd_backlight = 4

lcd_columns = 16
lcd_rows    = 2


lcd = LCD.Adafruit_CharLCD(lcd_rs, lcd_en, lcd_d4, lcd_d5, lcd_d6, lcd_d7,
                       lcd_columns, lcd_rows, lcd_backlight)

# Display Wlan0 IP
time.sleep(2.0)
lcd.clear()
lcd.message('Wlan0')
time.sleep(2.0)

lcd.clear()
ipaddr = run_cmd(cmd)
lcd.message(datetime.now().strftime('%b %d  %H:%M:%S\n'))
lcd.message('IP %s' % (ipaddr))
sleep(2)

# Display Eth0 IP
time.sleep(2.0)
lcd.clear()
lcd.message('Eth0')
time.sleep(2.0)
lcd.clear()
ipaddr = run_cmd(cmd2)
lcd.message(datetime.now().strftime('%b %d  %H:%M:%S\n'))
lcd.message('IP %s' % (ipaddr))
sleep(2)
time.sleep(5.0)


lcd.clear()
lcd.blink(True)
lcd.message('Clearing\nCache')
sys.stdout.flush()
time.sleep(5.0)

1 Ответ

0 голосов
/ 30 сентября 2018

Лучше создать функцию, которая отправляет информацию на ваше устройство.Кроме того, вам нужно создать функцию get_cmd(interface), чтобы получить IP-адрес для данного интерфейса.Вы запрашиваете один и тот же cmd дважды, и я полагаю, вы получаете информацию только для одного интерфейса.

import time
import sys
import Adafruit_CharLCD as LCD

from Adafruit_CharLCD import Adafruit_CharLCD
from subprocess import Popen, PIPE
from time import sleep, strftime
from datetime import datetime

cmd = "ip -4 addr show {interface} | grep inet | awk '{{print $2}}' | cut -d/ -f1"


def run_cmd(cmd):
    p = Popen(cmd, shell=True, stdout=PIPE)
    output = p.communicate()[0]
    return output


def get_cmd(interface):
    return cmd.format(interface=interface)


def lcd_show(lcd, interface):
    cmd = get_cmd(interface)
    ipaddr = run_cmd(cmd)

    lcd.clear()
    lcd.message(interface)
    time.sleep(2)

    lcd.clear()
    lcd.message(datetime.now().strftime('%b %d  %H:%M:%S\n'))
    lcd.message('IP %s' % (ipaddr))
    time.sleep(2)


lcd_rs        = 25  
lcd_en        = 24
lcd_d4        = 23
lcd_d5        = 17
lcd_d6        = 18
lcd_d7        = 22
lcd_backlight = 4

lcd_columns = 16
lcd_rows    = 2
lcd = LCD.Adafruit_CharLCD(
    lcd_rs, lcd_en, lcd_d4, lcd_d5, lcd_d6, lcd_d7,
    lcd_columns, lcd_rows, lcd_backlight)

time.sleep(2)
try:
    while True
        lcd_show(lcd, 'Wlan0')
        lcd_show(lcd, 'Eth0')
        sleep(5)
except KeyboardInterrupt:
    lcd.clear()
    lcd.blink(True)
    lcd.message('Clearing\nCache')
...