Как улучшить мой авто-переподключение скрипт Python


Мне нужна обратная связь. Из-за странный вопрос на мой сервер системы, сетевая карта периодически отключается от сети. Я исправлю это позже. Но я хотел бы знать, если ниже скрипт может быть улучшена.

Он состоит из двух файлов. Скрипт Python (autoConnect.py), и баш скрипт (checkOnline.sh).

autoConnect.py:

#!/usr/bin/python
from subprocess import call, Popen, PIPE, STDOUT
import time
cmd = './checkOnline.sh'
while True:
    p = Popen(cmd, shell=True, stdin=PIPE, stdout=PIPE, stderr=STDOUT, close_fds=True)
    if "0" in p.stdout.read():
        print time.ctime() + ": Offline"
        print "Attempting to reconnect..."
        print "Determining network profile..."
        cmdTwo = "wicd-cli -ySl | sed -n '2 p' | grep -i paws -c"
        pTwo = Popen(cmdTwo, shell=True, stdin=PIPE, stdout=PIPE, stderr=STDOUT, close_fds=True)
        if "1" in pTwo.stdout.read():
            print "Network profile is \"1\""
            defNum = 1
        else:
            print "Network profile is \"2\""
            defNum = 2
        print "Connecting to network..."
        p = Popen(cmd, shell=True, stdin=PIPE, stdout=PIPE, stderr=STDOUT, close_fds=True)
        while "0" in p.stdout.read():
            call("wicd-cli -yn " + defNum + " -c")
            p = Popen(cmd, shell=True, stdin=PIPE, stdout=PIPE, stderr=STDOUT, close_fds=True)
            time.sleep(3)
            if "0" in p.stdout.read():
                print "Failed to connect. Trying again..."
        print "Success, connected to network!"
    else:
        print time.ctime() + ": Online"
    time.sleep(5)

checkOnline.sh:

#!/bin/bash

host=google.com

(ping -w5 -c3 $host  > /dev/null 2>&1) && echo "1" || (echo "0" && exit 1)

Бывший главный файл должен быть запущен. checkOnline пингует google.com 3 раза в течение 5 секунд, если ничего не будет возвращен в течение 5 секунд, он будет возвращать 0. Если он получает что-то, она возвращает 1 в поток stdout.

Я хотел бы знать, если это может быть улучшена за то, что я хочу, чтобы это сделать (проверить, если сеть находится в сети, поиск сетей, подключиться, повторите). По состоянию на сейчас, я далеко от физического расположения моего сервера, и я не могу проверить его на нынешнюю систему я использую, но сценарий должен быть функциональным.



357
6
задан 29 октября 2011 в 04:10 Источник Поделиться
Комментарии
1 ответ


  1. Я бы переместить содержимое скрипта в функцию main, а затем использовать , если __имя__ == '__главный__' шаблонный, чтобы запустить его.

  2. Я бы не стал использовать внешние инструменты, такие как bash/СЭД/grep, чтобы сделать дополнительную логику. Я бы реализовать эту логику на Python.

  3. Я бы использовал способ общаться объектов к popen, а затем значение атрибута в stdout

  4. Ваш POpens все очень похожи. Я мог бы написать функцию, которая принимает в командной строке выполняет ее и возвращает стандартный вывод

  5. Вы проверить, если вы подключены в нескольких местах, писать am_connected (функцию), которая возвращает true или false и использовать его несколько раз

  6. Я бы, наверное, написать функцию для каждого внешнего команду можно выполнить, даже если они не повторяются, потому что это сделает ваш код чище.

7
ответ дан 29 октября 2011 в 05:10 Источник Поделиться