使用python和raspbian编辑wpa_supplicant.conf

时间:2019-05-12 15:50:02

标签: python raspberry-pi wifi raspbian wpa-supplicant

想要从kivy应用程序添加wifi连接,我正在使用一个简单的功能来编辑wpa_supplicant.conf文件,在其中添加新的网络。

我的函数正确地将配置写入那里,并且看起来与通过树莓派GUI进行的配置相同...

但是当我重新启动树莓时,它说没有找到网络接口,但是如果我从wpa_supplicant.conf文件中删除最后添加的行,它会解决。由于某些原因,raspbian在编辑后无法正确读取此文件,但是在这里我看不到我做错了什么,这违背了默认配置。

希望有人可以给我一些提示...我以sudo身份运行脚本,所以不会出现任何权限问题,我试图研究编写config和raspbian提供的config的方式上的任何区别,但是没有头绪...

在这里您可以看到代码:

def CreateWifiConfig(SSID, password):
        config = (
                '\nnetwork={{\n' +
                '\tssid="{}"\n' +
                '\tpsk="{}"\n' + '}}').format(SSID, password)
        print(config)
        with open("/etc/wpa_supplicant/wpa_supplicant.conf", "a+") as wifi:
            wifi.write(config)
        wifi.close()
        print("Wifi config added")```

1 个答案:

答案 0 :(得分:1)

这只是一个简短的注释-我尚未运行您的代码,我只是根据我正在阅读的内容对其进行解释-但这里有几件事让我印象深刻:

1)我在您的配置中看不到key_mgmt值。通常这类似于WPA-PSK,但是您可以看到一些其他可能的值here

2)因为您使用的是the "with" statement,所以应该自动为您关闭该文件(您无需再次调用close())。

3)构建配置字符串的方式对我来说有点奇怪,这样的事情(完全主观,对我来说更易理解):

def CreateWifiConfig(SSID, password):
  config_lines = [
    '\n',
    'network={',
    '\tssid="{}"'.format(SSID),
    '\tpsk="{}"'.format(password),
    '\tkey_mgmt=WPA-PSK',
    '}'
  ]

  config = '\n'.join(config_lines)
  print(config)

  with open("/etc/wpa_supplicant/wpa_supplicant.conf", "a+") as wifi:
    wifi.write(config)

  print("Wifi config added")

4)这里要注意的另一件事是该代码不是幂等的-您将无法多次运行此代码而不会损害文件内容的完整性。您可能已经意识到了这一点,可能不太在意,但无论如何都只是指出来。

希望丢失的key_mgmt就是全部。