как пропустить сообщение "соединение: сеть недоступна" - PullRequest
0 голосов
/ 22 сентября 2018

Я создал скрипт, который запускается при загрузке, который проверяет, есть ли подключение к Интернету на моем Raspberry Pi, и в то же время обновляет время (забота о ntp) - через os.system().

import datetime, os, socket, subprocess
from time import sleep

dir_path = os.path.dirname(os.path.abspath(__file__))

def internet(host="8.8.8.8"):
    result = subprocess.call("ping -c 1 "+host, stdout=open(os.devnull,'w'), shell=True)
    if result == 0:
        return True
    else:
        return False


timestr = time.strftime("%Y-%m-%d--%H:%M:%S")
netstatus = internet()

while netstatus == False:
    sleep(30)
    netstatus = internet()

if netstatus == True:
    print "successfully connected! updating time . . . "
    os.system("sudo bash "+dir_path+"/updatetime.sh") 
    print "time updated! time check %s"%datetime.datetime.now()

, где updatetime.sh содержит следующее:

service ntp stop
ntpd -q -g
service ntp start

этот скрипт выполняется при перезагрузке / загрузке, и я запускаю его на нашем рабочем месте, 24/7.Кроме того, выходные данные из таких сценариев сохраняются в файле журнала.он работает нормально, но есть ли способ, как НЕ для вывода connect: Network is unreachable, если нет подключения к интернету?спасибо.

edit

я запускаю этот скрипт через скрипт оболочки с именем launch.sh, который запускает check_net.py (имя этого скрипта), и другие предварительные скрипты,и я поместил launch.sh в свой crontab для запуска при загрузке / перезагрузке:

@reboot sh /home/pi/launch.sh > /home/pi/logs/cronlog 2>&1

из того, что я прочитал в этой теме: что значит '> / dev / null / 2> & 1'означают , 2 ручки stderr, где 1 ручки stdout.

Я новичок в этом.Я хочу видеть мои stdout - но не stderr s (в данном случае connect: Network is unreachable сообщений (только) ..

/ ogs

1 Ответ

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

В соответствии с предложением @shellter link в комментариях я перестроил свой cron на:

@reboot sh /home/pi/launch.sh 2>&1 > /home/pi/logs/cronlog | grep "connect: Network is unreachable" 

в качестве альтернативы, я также придумал альтернативное решение, которое включаетдругой способ проверки интернет-соединения с использованием urllib2.urlopen():

def internet_init():
    try:
        urllib2.urlopen('https://www.google.com', timeout=1)
        return True
    except urllib2.URLError as err:
        return False

. Любой из двух указанных выше способов пропускает любую ошибку connect: Network is unreachable в моих журналах.

спасибо!

/ ogs

...