2015-09-24 41 views
-1

昨天我發現我無法在我家的一些地方使用無線網絡。我使用另一個調制解調器作爲WiFi助推器,並設法覆蓋這些位置。關於改善我的代碼的建議

問題是,當我去這些死角時,我需要使用靜態IP,並更改我的主DNS服務器,或者我得到有限的連接。另外,當我不在這些地方時,我仍然想使用DHCP。

我寫了兩個批處理文件和一個python腳本來定義無線適配器設置。

我希望有人看一看,並建議如何改善它。

批處理文件(我使用的,因爲運行它們的管理員選項的快捷方式)

  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/),瞭解如何改進它。但是*只有在它有效時纔會使用* - 如果他們發現他們必須調試代碼,他們往往會非常惱火(這更像是我們的工作) – DSM

+0

@DSM,謝謝,我會在那裏問。 wOxxOm,感謝您編輯我的帖子。 – Galc127

+0

@DSM其實,爲了澄清,我們不會感到惱火。破碎的代碼是嚴格偏離主題的。這並不意味着一個晦澀難懂的問題會讓問題脫離主題。但是,如果它顯然被破壞了(不做它應該做的事情,即使在最好的情況下也不會編譯,如果你運行你自己的代碼,就會出現語法錯誤......你可以捕捉到的東西)是關閉的。 –

回答

0

不知道你的程序結構的其餘部分...

您可以用​​香料它!

然後,您可以撥打:

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

也嘗試蟒蛇wifi.py - 幫助:) – visc