Python:wifi subprocess.CalledProcessError:命令'['/sbin/ifdown','wlp4s0']'返回非零退出状态1 [英] Python: wifi subprocess.CalledProcessError: Command '['/sbin/ifdown', 'wlp4s0']' returned non-zero exit status 1

查看:42
本文介绍了Python:wifi subprocess.CalledProcessError:命令'['/sbin/ifdown','wlp4s0']'返回非零退出状态1的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在编写一个 python 脚本来自动连接到已知的 Wifi.我正在使用以下库 https://wifi.readthedocs.io/en/latest/ 这似乎工作得很好.唯一的问题是,当尝试通过 scheme.activate() 命令连接到选定的 Wifi 时,它返回以下错误:

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 very well. The only problem is that when a try to connect to a chosen Wifi through the scheme.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

我真的不明白.

脚本名称为wifi_connection.py,代码如下:

The name of the script is wifi_connection.py and the code is the following:

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

其中wlp4s0是wifi接口的名称,dotbot"和pass"分别是wifi的名称和密码.

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

预先感谢您的帮助.

奇怪的是,当我运行命令ifconfig"时,我得到:

The strange thing is that when I run the command "ifconfig", 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 

但是如果我尝试/sbin/ifdown wlp4s0",那么我得到:

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

Unknown interface wlp4s0

推荐答案

除非我弄错了,我发现 ifdown/ifup 似乎不再使用了.我已经在我自己的项目中修复了你的第一个错误,但我似乎无法修复第二部分.

Unless I am mistaken, what I have found is that ifdown/ifup don't seem to be used anymore. I have fixed your first error within my own project but I cannot seem to fix the second part.

ifdown wlan0 已更改为 ifconfig wlan0 down和 ifup 到 ifconfig wlan0 up

ifdown wlan0 has been changed to ifconfig wlan0 down and ifup to ifconfig wlan0 up

因此,在此处更改来自此 wifi 包的 scheme.py 脚本:

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

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

改为:

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

我本人目前仍在研究第二部分.

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

祝你好运!

这篇关于Python:wifi subprocess.CalledProcessError:命令'['/sbin/ifdown','wlp4s0']'返回非零退出状态1的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆