2015-09-24 3 views
-1

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

Проблема в том, что, когда я иду в эти мертвые точки, мне нужно использовать статический IP-адрес и изменить мои первичные DNS-серверы, или я получаю ограниченное соединение. Кроме того, я все еще хочу использовать DHCP, когда я не в этих местах.

Я написал два командных файла и скрипт python для определения параметров беспроводного адаптера.

Я хотел бы, чтобы кто-то взглянул и предложил, как улучшить его.

Batch Files (я использую ярлыки из-за опции для запуска их в качестве администратора)

  1. DeadSpots.bat.ink

    netsh interface ip set address "Wi-Fi" static 192.168.x.x 255.255.255.0 192.168.x.x 
    netsh interface ip set dns "Wi-Fi" static 192.168.x.x primary # This is the second modem 
    netsh interface ip add dns "Wi-Fi" ISP.dns.IP index=2 
    
  2. Regular.bat.ink

    netsh interface ip set address "Wi-Fi" dhcp 
    netsh interface ip set dnsservers "Wi-Fi" source=dhcp 
    

Python код

import subprocess as sub 

def WiFi(): 
    filepath1 = Path_To_DeadSpots.bat.ink 
    filepath2 = Path_To_Regular.bat.ink 
    loc = input("Please choose your location: 1-Rooms, 2-Rest \n") 
    while(loc != "1" and loc != "2"): 
     print("Wrong input, please choose again") 
     loc = input("Please choose your location: 1-Rooms, 2-Rest \n") 
    if loc == "1": 
     p = sub.Popen(filepath1,shell=True,stdout=sub.PIPE) 
    else: 
     p = sub.Popen(filepath2,shell=True,stdout=sub.PIPE) 
WiFi() 

Просьба предложить улучшения, спасибо.

+7

Если код работает и делает то, что вы хотите, чтобы это сделать, вы могли бы принять это в [Обзор кода] (http://codereview.stackexchange.com/) для предложений о способах его улучшения. Но *, только если это работает * - они, как правило, очень раздражают, если они находят, что им нужно отлаживать код (это больше наша работа здесь на SO.) – DSM

+0

@ DSM, спасибо, я попрошу. wOxxOm, спасибо за редактирование моего сообщения. – Galc127

+0

@DSM На самом деле, для выяснения, нас не раздражает. Сломанный код строго не по теме. Это не означает, что непонятная ошибка делает вопрос вне темы. Но если он явно сломан (не делает то, что он должен, не компилируется даже в наилучшем случае, есть синтаксическая ошибка ... вещи, которые вы можете поймать, если вы запускаете свой собственный код) закрывается , –

ответ

0

Не зная покоя вашей структуры программ ...

Вы могли бы оживить его с argparse!

Тогда вы можете позвонить:

python wifi.py --path-to-deadspots ./deadspots.bat.ink --path-to-regulars ./regulars.bat.ink --room-loc 2

Пример:

import argparse 
import subprocess as sub 

class IsAccesible(argparse.Action): 
    def __call__(self, parser, namespace, values, option_string=None): 
     if os.path.isfile(values): 
      if os.access(values, os.R_OK): 
       setattr(namespace, self.dest, values) 
      else: 
       raise ValueError("Path is not accesible") 

class IsValidRoomLoc(argparse.Action): 
    def __call__(self, parser, namespace, values, option_string=None): 
     if values == 1 or values == 2: 
      setattr(namespace, self.dest, values) 
     else: 
      raise ValueError("Room loc is not valid") 

def WiFi(): 

    parser = argparse.ArgumentParser() 
    parser.add_argument('--path-to-deadspots', dest='path_to_deadspots', help="The deadspots file location", type=str, required=True, action=IsAccesible, default="./deadspots.bat.ink") 
    parser.add_argument('--path-to-regular', dest='path_to_regular', help="The regular file location", type=str, required=True, action=IsAccesible, default="./regular.bat.ink") 
    parser.add_argument('--room-loc', dest='room_loc', help="The room lock, \'1\' or \'2\'", type=int, required=True, action=IsValidRoomLoc, default=1) 

    args = parser.parse_args() 

    path_to_deadspots = args.path_to_deadspots 
    path_to_regular = args.path_to_regular 
    room_loc = args.room_loc 

    if room_loc == "1": 
     p = sub.Popen(path_to_deadspots,shell=True,stdout=sub.PIPE) 
    else if room_loc == "2": 
     p = sub.Popen(path_to_regular,shell=True,stdout=sub.PIPE) 

WiFi() 

Вы можете также удалить первый аргумент и просто:

python wifi.py ./deadspots.bat.ink ./regulars.bat.ink 2

+0

Ничего себе, спасибо! Я обязательно многому научу от вашего кода. – Galc127

+1

Добро пожаловать :-) Просто научился делать это за последние несколько недель! – visc

+1

Также попробуйте python wifi.py --help :) – visc

Смежные вопросы