2017-05-24 10 views
3

私はPythonスクリプトを使って、既知のWifiに自動的に接続します。 私は次のライブラリhttps://wifi.readthedocs.io/en/latest/を使用していますが、これはうまくいくようです。Python:wifi subprocess.CalledProcessError:コマンド '['/sbin/ifdown '、' wlp4s0 ']'がゼロ以外の終了ステータス1を返しました

Traceback (most recent call last): 
    File "wifi_connection.py", line 100, in <module> 
    print Connect('dotbot', 'pass') 
    File "wifi_connection.py", line 64, in Connect 
    savedcell.activate() 
    File "/home/pietro/.local/lib/python2.7/site-packages/wifi/scheme.py", line 172, in activate 
    subprocess.check_output(['/sbin/ifdown', self.interface], stderr=subprocess.STDOUT) 
    File "/usr/lib/python2.7/subprocess.py", line 574, in check_output 
    raise CalledProcessError(retcode, cmd, output=output) 
subprocess.CalledProcessError: Command '['/sbin/ifdown', 'wlp4s0']' returned non-zero exit status 1 

私は本当に理解していない。唯一の問題は、tryがscheme.activate()コマンドで選択した無線LANに接続するために、とき、それは次のエラーを返すことです。

スクリプトの名前はwifi_connection.pyで、コードは以下の通りである

wlp4s0がWiFiインターフェース、「dotbot」の名前と「パス」は、それぞれの名前でありさ
import wifi 


def Search(): 
    wifilist = [] 

    cells = wifi.Cell.all('wlp4s0') 

    for cell in cells: 
     wifilist.append(cell) 

    return wifilist 


def FindFromSearchList(ssid): 
    wifilist = Search() 

    for cell in wifilist: 
     if cell.ssid == ssid: 
      return cell 

    return False 


def FindFromSavedList(ssid): 
    cell = wifi.Scheme.find('wlp4s0', ssid) 

    if cell: 
     return cell 

    return False 


def Add(cell, password=None): 
    if not cell: 
     return False 

    scheme = wifi.Scheme.for_cell('wlp4s0', cell.ssid, cell, password) 
    scheme.save() 
    return scheme 


def Delete(ssid): 
    if not ssid: 
     return False 

    cell = FindFromSavedList(ssid) 

    if cell: 
     cell.delete() 
     return True 

    return False 


def Connect(ssid, password): 
    cell = FindFromSearchList(ssid) 

    if cell: 
     savedcell = FindFromSavedList(cell.ssid) 

     # Already Saved from Setting 
     if savedcell: 
      savedcell.activate() 
      return cell 

     # First time to connect 
     else: 
      if cell.encrypted: 
       if password: 
        scheme = Add(cell, password) 

        try: 
         scheme.activate() 

        # Wrong Password 
        except wifi.exceptions.ConnectionError: 
         Delete(ssid) 
         return False 

        return cell 
       else: 
        return False 
      else: 
       scheme = Add(cell) 

       try: 
        scheme.activate() 
       except wifi.exceptions.ConnectionError: 
        Delete(ssid) 
        return False 

       return cell 

    return False 

print " " 
print Search() 
print " " 
print Connect('dotbot', 'pass') 
print " " 

wifiとそのパスワード。

ご協力いただきありがとうございます。

奇妙なことは、私は、コマンド "ifconfigコマンド" を実行したときに、私が得ることです:

wlp4s0 Link encap:Ethernet IndirizzoHW e0:06:e6:f8:53:29 
      indirizzo inet:192.168.0.116 Bcast:192.168.0.255 
      Maschera:255.255.255.0 
      indirizzo inet6: fe80::525e:7c8d:6f43:9d98/64 Scope:Link 
      UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 
      RX packets:222347 errors:0 dropped:0 overruns:0 frame:96541 
      TX packets:147762 errors:0 dropped:0 overruns:0 carrier:0 
      collisioni:0 txqueuelen:1000 
      Byte RX:208449235 (208.4 MB) Byte TX:17616899 (17.6 MB) 
      Interrupt:19 

が、私は "/ sbinに/ ifdownをwlp4s0" しようとすると、その後、私が手:

Unknown interface wlp4s0 
+0

'/ sbin/ifdown wlp4s0'を手で実行するとどうなりますか?それが動作しない場合、私たちはpythonスクリプトが間違っていないことを知っています。 'sudo'のように、' root'ユーザとして実行する必要があるかもしれません。 –

+0

あなたの質問に答えて投稿を編集しました。 ps。私がsudoを使ってpythonスクリプトを実行すると、同じエラーが出る –

答えて

0

例えば、あなたのインターフェースが

/etc/network/interfaces

私の設定で設定されていることを確認します

auto wlp7s0 
iface wlp7s0 inet loopback 
関連する問題