Python:wifi subprocess.CalledProcessError:命令'['/sbin/ifdown','wlp4s0']'返回非零退出状态1 [英] Python: wifi subprocess.CalledProcessError: Command '['/sbin/ifdown', 'wlp4s0']' returned non-zero exit status 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屋!