如何省略 "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' mean,2
处理 stderr
,而 1
处理 stdout
。
我是新手。我希望看到我的 stdout
- 但不是 stderr
s(在这种情况下,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
我创建了一个 运行 在启动时检查我的 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' mean,2
处理 stderr
,而 1
处理 stdout
。
我是新手。我希望看到我的 stdout
- 但不是 stderr
s(在这种情况下,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