Python: wifi subprocess.CalledProcessError: command '[' / sbin / ifdown ',' wlp4s0 ']' returns non-zero exit status 1

I am working on a python script to automatically connect to a known wifi. I am using the following library https://wifi.readthedocs.io/en/latest/ which seems to work pretty well. The only problem is when trying to connect to the selected Wi-Fi via the schem.activate () command, it returns the following error:

    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

      

which I really don't understand.

The script name is wifi_connection.py and the code is as follows:

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 " "

      

where wlp4s0 is the name of the wifi interface, "dotbot" and "pass" are the wifi name and password, respectively.

Thank you in advance for your help.

The strange thing is that when I run the "ifconfig" command, I get:

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 

      

but if I try "/ sbin / ifdown wlp4s0" I get:

Unknown interface wlp4s0

      

+3


source to share


2 answers


make sure your interface is configured in

/ etc / network / interfaces



my config, for example:

auto wlp7s0
iface wlp7s0 inet loopback

      

0


source


If I'm wrong, I found ifdown / ifup are no longer used. I fixed your first mistake in my own project, but I cannot fix the second part.

ifdown wlan0 was changed to ifconfig wlan0 down and ifup to ifconfig wlan0 up

So, change the schem.py script that comes from this wifi package:

    subprocess.check_output(['/sbin/ifdown', self.interface], stderr=subprocess.STDOUT)

      



change this value:

    subprocess.check_output(['/sbin/ifconfig', self.interface,'down'], stderr=subprocess.STDOUT)

      

I am still working on the second bit at the moment.

Good luck!

0


source







All Articles