Форум сайта python.su
есть скрипт
# -*- coding: koi8-r -*-
import socket
import os
from win32com.client import Dispatch
from time import sleep
from datetime import datetime
wsh = Dispatch(“WScript.Shell”)
while True:
def f():
try:
socket.gethostbyaddr('www.yandex.ru')
except socket.gaierror:
return False
return True
if f()==False: wsh.Run(“MPLAY32 /play /close 01.mp3”, 0, 1)
else:
continue
пингует и при отсутствии пинга проигрывает мp3 файл…или перезагружает комп
os.system(“shutdown -r -t 1”)
но бывает что пинг временами не проходит. Надо что бы скрипт в течении 30 секунд не прохождения пинга перезагружал комп а если пинг появляется в интервале этих 30 секунд то продолжил выполнение цикла
Офлайн
Если время не критично, то есть может пройти больше 30 секунд до перезагрузки, то можно выставить флаг того что нет пинга и получить время и сравнивать каждый цикл это время с текущим.
if f()==False and time_no_ping:
if datetime.datetime.now() - time_no_ping > 30:
wsh.Run("MPLAY32 /play /close 01.mp3", 0, 1)
elif f()==False:
time_no_ping = datetime.datetime.now()
else:
time_no_ping = None
continue
Офлайн
Спасибо….пойду в этом направлении думать, я немного по другому наваял….сейчас в тесте.
Офлайн
Потестил немного…вроде работает.Если вдруг затыки будут тогда уж по другому переделаю
import datetime
import socket
import sys
import time
from win32com.client import Dispatch
wsh = Dispatch("WScript.Shell")
# Получаем IP и порт для пинга
host = raw_input('Хост:')
port = raw_input('Порт:')
# Проверяем правильно ли написан порт
if not port.isalnum():
print 'Введите правильно порт'
sys.exit(1)
def tim():
time.sleep(15)
c = socket.socket()
c.settimeout(1)
try:
c.connect((host, int(port)))
except (socket.gaierror,socket.error):
return False
return True
while 1:
# Получаем дату и время
d = datetime.datetime.now()
timestamp = d.strftime("%Y-%m-%d %H:%M:%S")
# Создаёт сокет
s = socket.socket()
s.settimeout(1)
# Попытка подвключится к сокету
try:
s.connect((host, int(port)))
except socket.error:
print timestamp+' '+ host + ':' + port + ' - Неактивен'
tim()
print tim()
if tim()==False:
print tim()
wsh.Run("MPLAY32 /play /close 01.mp3", 0, 1)
else: continue
else:
s.close
print timestamp+' '+ host + ':' + port + ' - Активен'
time.sleep(1)
Отредактировано (Дек. 12, 2011 16:40:39)
Офлайн
Исходник точно не припомню где взял…совсем немного переделал…так что исходник не мой
И еще…когда музыку проигрывает,подвисает все, перед проигрышем, а после того как музыка заиграла то все нормально
Может еще как проиграть по другому можно…другим методом?
Все под виндой проверял
Отредактировано (Дек. 12, 2011 17:00:53)
Офлайн
Я с виндой мало работаю. Думаю можно покопать в сторону popen(<команда>) и плеера который можно запускать из командной строки.
Офлайн