通过 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 命令,而程序中没有上述代码,程序将不会停止并正常工作,没有任何问题。我真的不知道为什么。谁能告诉我原因吗?

在我们的项目中,我们需要在程序中自动设置网络配置,有人知道该怎么做吗?

相关内容