SSH 도구를 통해 Linux 명령을 실행하는 것과 내 프로그램에 명령을 추가하는 것의 차이점은 무엇입니까?

SSH 도구를 통해 Linux 명령을 실행하는 것과 내 프로그램에 명령을 추가하는 것의 차이점은 무엇입니까?

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 명령을 실행하면 프로그램이 멈추지 않고 문제 없이 정상적으로 작동합니다. 왜인지는 정말 모르겠습니다. 누구든지 이유를 말해 줄 수 있습니까?

우리 프로젝트에서는 프로그램의 네트워크 구성을 자동으로 설정해야 합니다. 이 작업을 수행하는 방법을 아는 사람이 있습니까?

관련 정보