如何省略 "connect: network is unreachable" 消息

how to omit "connect: network is unreachable" message

我创建了一个 运行 在启动时检查我的 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

此脚本 运行 位于 reboot/boot,我正在 运行 在我们的工作场所全天候 24 小时运行此脚本。此外,此类脚本的输出保存在日志文件中。它工作正常,但是有没有办法 NOT 输出 connect: Network is unreachable 如果没有互联网连接?谢谢。

编辑

i 运行 这个脚本通过我命名为 launch.sh 的 shell 脚本 which 运行s check_net.py (这个脚本的名字),和其他初步脚本,我将 launch.sh 在我的 crontab 中放置到 运行 上 boot/reboot:

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

根据我在此线程中的阅读内容:what does '>/dev/null/ 2>&1' mean2 处理 stderr,而 1 处理 stdout

我是新手。我希望看到我的 stdout - 但不是 stderrs(在这种情况下,connect: Network is unreachable 消息(仅)..

/ogs

根据@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