NetworkManager-connectionsで2つの接続を作成し、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')
# [...]
このアプローチを使用すると、2つの接続がそれぞれの場合に機能できますが、プログラムは停止します。以下は主な機能です。 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コマンドを実行すると、プログラムは停止せずに問題なく正常に動作します。なぜかは本当に分からない。誰でも理由を教えてもらえますか?
私たちのプロジェクトでは、プログラムのネットワーク構成を自動的に設定する必要があります。これを行う方法を知っている人はいますか?