使用python和raspbian编辑wpa_supplicant.conf

问题描述 投票:0回答:1

将要从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")```
python raspberry-pi wifi raspbian wpa-supplicant
1个回答
0
投票

这只是一个简短的评论-我还没有运行您的代码,我只是根据我正在阅读的内容来解释它-但这里有几件事让我印象深刻:

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仅此而已。

© www.soinside.com 2019 - 2024. All rights reserved.