
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 명령을 실행하면 프로그램이 멈추지 않고 문제 없이 정상적으로 작동합니다. 왜인지는 정말 모르겠습니다. 누구든지 이유를 말해 줄 수 있습니까?
우리 프로젝트에서는 프로그램의 네트워크 구성을 자동으로 설정해야 합니다. 이 작업을 수행하는 방법을 아는 사람이 있습니까?