Home

Tags

Скрипт авто подключения к инету при его исчезновении

2010-04-05 python pexpect internet

Скрипт проверяет наличие интернета путем пинга на yandex.ru, в случае отсутствия выполняет команду отключения, а затем подключения интернета с правами root.

#!/usr/bin/python
# coding: utf8

# Проверка наличия инета
def check():
    cmd = 'ping yandex.ru -c 5'
    import subprocess
    PIPE = subprocess.PIPE
    p = subprocess.Popen(cmd, shell=True, stdin=PIPE, stdout=PIPE,
            stderr=subprocess.STDOUT, close_fds=True)
    buf = p.stdout.read()
    return 'time=' in buf

# Выполнить команду от рута
def execcommand(cmd):
    mypass = 'mypass\n'

    try:
        from pexpect import spawn, EOF
        child = spawn(cmd)
        res = child.expect([r'.+?password.+?:\s?', EOF], timeout=120)
        print 'res = ',res
        child.sendline(mypass)
    except Exception as e:
        print 'except:',str(e)

import time
col = 0
while 1:
    try:
        time.sleep(30)
        print 'check',
        if check(): col = 0
        else: col +=1
        print col
        if col > 1: # Если разрыв более 1 мин, делаем переподключение
            print 'poff'
            execcommand("sudo poff dsl-provider") # Разрыв
            time.sleep(5)
            print 'pon'
            execcommand("sudo pon dsl-provider") # Соединение
    except Exception as e:
        print 'except:',str(e)



примечание: вместо программного ввода пароля для sudo разумней сделать возможность запуска этих команд без ввода пароля sudo, см sudo без ввода пароля