Рубрики
Без рубрики

Сценарий, который Спас Мое Здравомыслие

Если вы используете MacBook и у вас возникли проблемы с сигналами Wi-Fi, этот скрипт может просто помочь вам!

Автор оригинала: Laszlo L. Mari.

Когда кто-то получает новый MacBook, такие вещи, как отключение сигнала Wi-Fi, могут убить атмосферу. На самом деле это убило меня более чем на 6 или 7 месяцев, когда мой новый Интернет был подключен. Провайдеры сменили мой маршрутизатор, проверили сеть и сделали все, что могли, но не смогли починить машину. Я почти уверен, что это мешает чему-то на той же частоте, но из-за количества электрических устройств дома у меня никогда не было столько времени, чтобы “отладить”, почему это происходит.

Спасибо, Макбук

Я купил себе новую рабочую машину, которая на самом деле была моим первым устройством Apple, за несколько дней до Рождества. Это был блестящий, тонкий MacBook Air. Но из всех функций это даже близко не является лучшими функциями. Убийственной особенностью любого MacBook является их Аппаратный API , который Apple ежедневно публикует, редактирует и расширяет в Интернете.

Поэтому после 2 дней игры с моим Mac, настройки среды разработчика, изучения сочетаний клавиш я обнаружил эту документацию и сразу же начал искать Wi-Fi. Несмотря на всю радость, которую могут испытывать люди, она была там, сияющая ярко и хорошо задокументированная. С помощью CW Interface Class Reference у вас есть полный контроль над большинством частей вашего соединения.

Здание

После того, как я нашел это, я понял, что должен решить проблему с Wi-Fi и сделать то, что я обычно делаю, повторно подключить или включить, а затем выключить сигнал. Поэтому я начал думать о том, как подойти к этому и придумал этот сценарий, который я подробно расскажу позже:

#!/usr/bin/python

from AppKit import CWInterface
import socket
import time
from urllib2 import urlopen, URLError, HTTPError

starttime=time.time()



def reConnect():
    iface = CWInterface.interface()
    iface.setPower_error_(False, None)
    iface.setPower_error_(True, None)

    print "your wifi should work now!"



def wifiCorrect():
        socket.setdefaulttimeout( 0.2 )

        url = 'http://google.com/'
        try :
            response = urlopen( url )
        except HTTPError, e:
            print 'The server couldn\'t fulfill the request. Reason:', str(e.code)
        except URLError, e:
            print 'We failed to reach a server. Reason:', str(e.reason)
            reConnect()
        except socket.timeout as e:
            reConnect()
        else :
            print 'got response!'

while True:
  wifiCorrect()
  time.sleep(10.0 - ((time.time() - starttime) % 10.0))

После этого вы можете просто войти в каталог с вашим терминалом и запустить python yourfilename.py где yourfilename.py это имя сохраненного файла, в котором хранится ваш сценарий.

Что Делает Эта Штука?

Если вам просто нужно решение, оно у вас есть, но для людей, которые немного более любопытны и хотят узнать больше о программе, я подробно расскажу об этом в этом разделе.

Первая очень важная вещь-это из интерфейса импорта AppKit . Здесь мы импортируем модуль CWInterface из собственной библиотеки API, совместимой с C, и мне действительно пришлось приложить некоторые усилия, чтобы разобраться с его синтаксисом, но мы увидим это позже.

Мы импортируем кучу других вещей, включая ping , который помогает нам пинговать сервер ( я не использую его в этой версии, но я оставил его, потому что он может быть там в обновленной версии), сокет для создания сокетных соединений между вашим устройством и сервером, время , чтобы иметь возможность запускать этот скрипт каждые ” n ” секунд и некоторые urllib2 модули, которые, если у вас нет предустановленных, вы можете установить его с помощью sudo pip install urllib2

Я также запускаю таймер, чтобы отслеживать прошедшие 10 секунд, когда мне нужно снова запустить таймер.

Я также определяю 2 функции. давайте сначала перейдем к нижней: wifi Correct не самое подходящее имя, вероятно, потому, что оно напрямую не исправляет Wi-Fi, оно пытается пинговать google.com и если он выходит из строя из-за моей сети, он вызывает другую функцию под названием reConnect , которая здесь творит волшебство.

В wifiCorrect я вызываю socket.setdefaulttimeout( 0.2) , который в основном является таймаутом соединения в секундах (среднее время отклика должно составлять около 10-40 мс, поэтому 200 мс-это много для этого, но я оставил его таким, чтобы он не квалифицировал супер медленный Интернет как замороженный Интернет.)

Некоторые из объяснений ошибок:

  • Ошибка HTTP в основном не вина жены, есть некоторые проблемы с Google
  • Ошибка URL – самая распространенная ошибка, которую я получаю, когда она не может разрешить хост. Мой Wi-Fi не полностью отключен, но вообще не посылает никаких сигналов
  • socket.timeout – это тайм-аут сокета 200 мс, который мы установили ранее (0,2 секунды), и это также часто случается.

повторно подключиться()

Я уже говорил вам, что функция reConnect содержит магию, и да. Это раздел, который может составлять 100 строк в Linux в зависимости от аппаратного обеспечения, а также для Windows… Я даже не знаю, почему люди кодируют Python в Windows, потому что это, скорее всего, плохая практика каждый раз.

Поэтому в этом разделе я определяю интерфейс, как пишет ссылка разработчика Apple, я помещаю данные сетевого интерфейса в переменную с именем iface и просто выключаю, а затем включаю Wi-Fi. Я не забочусь о сетях, приоритете и других здесь, потому что мне это нужно только для одной сети за раз, но если у вас есть несколько wifi в одной области, и вы каждый раз выбираете его вручную, посмотрите на сетевые настройки в раскрывающемся списке значка Wi-Fi, и вы можете изменить приоритет своих сетей там для автоматического подключения.

Вы можете прочитать о функции set Power, которую я использую ЗДЕСЬ .

Я надеюсь, что вам понравился мой учебник, и если я решил проблему, напишите мне сообщение на Codementor или если у вас есть какие-либо проблемы со сценарием, обязательно сообщите мне, и я буду рад помочь в любое время! Ура!