Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 10, 2011 20:50:55

sanodin
От:
Зарегистрирован: 2011-06-16
Сообщения: 515
Репутация: +  31  -
Профиль   Отправить e-mail  

интервал времени

есть скрипт

# -*- 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 секунд то продолжил выполнение цикла

Офлайн

#2 Дек. 12, 2011 06:23:23

minotavr_x86
От:
Зарегистрирован: 2010-05-21
Сообщения: 69
Репутация: +  0  -
Профиль   Отправить e-mail  

интервал времени

Если время не критично, то есть может пройти больше 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
Если время критично то надо работать с потоками. Пример выдумывать лень.



Офлайн

#3 Дек. 12, 2011 15:13:41

sanodin
От:
Зарегистрирован: 2011-06-16
Сообщения: 515
Репутация: +  31  -
Профиль   Отправить e-mail  

интервал времени

Спасибо….пойду в этом направлении думать, я немного по другому наваял….сейчас в тесте.

Офлайн

#4 Дек. 12, 2011 16:34:44

sanodin
От:
Зарегистрирован: 2011-06-16
Сообщения: 515
Репутация: +  31  -
Профиль   Отправить e-mail  

интервал времени

Потестил немного…вроде работает.Если вдруг затыки будут тогда уж по другому переделаю

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)

Офлайн

#5 Дек. 12, 2011 16:36:17

sanodin
От:
Зарегистрирован: 2011-06-16
Сообщения: 515
Репутация: +  31  -
Профиль   Отправить e-mail  

интервал времени

Исходник точно не припомню где взял…совсем немного переделал…так что исходник не мой

И еще…когда музыку проигрывает,подвисает все, перед проигрышем, а после того как музыка заиграла то все нормально
Может еще как проиграть по другому можно…другим методом?
Все под виндой проверял

Отредактировано (Дек. 12, 2011 17:00:53)

Офлайн

#6 Дек. 14, 2011 07:24:59

minotavr_x86
От:
Зарегистрирован: 2010-05-21
Сообщения: 69
Репутация: +  0  -
Профиль   Отправить e-mail  

интервал времени

Я с виндой мало работаю. Думаю можно покопать в сторону popen(<команда>) и плеера который можно запускать из командной строки.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version