我通过在 NetworkManager-connections 中创建两个连接,在 Orangepi Zero 的 NIC 上配置静态 IP 和 dhcp。安装的系统是armbian Ubuntu。
在我的程序中,我使用该popen
函数在不同情况下建立不同的连接,代码如下所示:eth0是dhcp连接名称,eth0:1是静态连接名称。
def configure():
if platform.system()== 'Linux':
os.popen('nmcli con up eth0:1')
fd = os.system(u'ping 192.168.10.8 -c 4')
if fd ==0:
app.run(host='0.0.0.0',port=80)
else:
os.popen('nmcli con down eth0:1')
os.popen('nmcli con up eth0')
# [...]
通过这种方法,两个连接能够在各自的情况下工作,但程序会停止。下面是主要功能。 wifi_connection、p.connect 和 u.connect 已成功实现。但正确执行最后一段代码l.stop()后,程序会自动强制关闭。
if __name__ == '__main__':
l = LED()
t = threading.Thread(target=configure)
t.start()
count = 1
if os.path.isfile('settings.txt'):
with open('settings.txt', 'r') as f:
settings = eval(f.read())
while True:
if settings['ssid'] is None or settings['psw'] is None:
break
else:
ret = wifi_connect(settings['ssid'], settings['psw'])
count += 1
if ret:
os.system('sh ./route.sh')
break
elif count == 3:
break
l.t = 1
while True:
ret = p.connect(115200)
if ret:
break
ret = p.connect(250000)
if ret:
break
time.sleep(5)
l.t = 0.1
while True:
ret = u.connect(settings['ip'], settings['eid'], settings['pw'])
if ret:
break
time.sleep(5)
l.stop()
但是,如果我只是通过 SSH 工具手动执行 nmcli 命令,而程序中没有上述代码,程序将不会停止并正常工作,没有任何问题。我真的不知道为什么。谁能告诉我原因吗?
在我们的项目中,我们需要在程序中自动设置网络配置,有人知道该怎么做吗?