我正在使用python脚本自动连接到已知的Wifi。 我正在使用以下库https://wifi.readthedocs.io/en/latest/,它似乎运行得很好。唯一的问题是,当尝试通过scheme.activate()命令连接到选定的Wifi时,它会返回以下错误:
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,代码如下:
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接口的名称,&#34; dotbot&#34;并且&#34;通过&#34;分别是wifi的名称和密码。
提前感谢您的帮助。
奇怪的是,当我运行命令&#34; ifconfig&#34;时,我得到:
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
但如果我尝试&#34; / sbin / ifdown wlp4s0&#34;,那么我得到:
Unknown interface wlp4s0
答案 0 :(得分:1)
除非我弄错了,我发现ifdown / ifup似乎不再使用了。我已经在我自己的项目中修复了你的第一个错误,但我似乎无法修复第二部分。
ifdown wlan0已更改为ifconfig wlan0 down 和ifup到ifconfig wlan0 up
所以,在这里更改来自这个wifi包的scheme.py脚本:
subprocess.check_output(['/sbin/ifdown', self.interface], stderr=subprocess.STDOUT)
将其更改为:
subprocess.check_output(['/sbin/ifconfig', self.interface,'down'], stderr=subprocess.STDOUT)
我现在还在第二位工作。
祝你好运!答案 1 :(得分:0)
确保您的界面已在
中配置的/ etc /网络/接口
我的配置,例如:
auto wlp7s0
iface wlp7s0 inet loopback