Проверка сетевого подключения и запуск программы на основе результата

#python

#python

Вопрос:

Я пишу программу, которая будет проверять наличие активного сетевого подключения, а затем запускать наш загрузчик программного обеспечения, если таковое имеется. Если в загрузчике есть обновление, готовое к загрузке, оно автоматически загрузит и установит указанное обновление.

 import urllib3
from subprocess import Popen
import subprocess


def run_downloader():
    return subprocess.Popen(['C:ProgramFilesPrecisionOSTechEducationPOSTdownloader.exe'])

def internet_on():

   if urllib3.urlopen('http://216.58.192.142', timeout=1):
    return True
   else:
      urllib3.URLError
   return False
   if internet_on == True:
    run_downloader()
  

Ожидается, что программа проверит активное соединение и вернет либо true, либо false. Если true, то он должен запустить загрузчик.

В настоящее время программа выполняется без ошибок, но не запускает загрузчик по завершении. Я могу только представить, что internet_on(): метод не возвращает true, как я хочу. Если я запущу подпроцесс.Откройте строку вне метода, загрузчик запустится, как запланировано.

Приветствуется любая помощь!

Спасибо

Комментарии:

1. Я вижу здесь две ошибки, во-первых, при попытке выдать ошибку, используйте raise и объект ошибки, а не класс. Во-вторых, если internet_on == True находится в отдельной функции?

2. Если internet_on == True находится в той же функции, мои отступы неверны? lol Я довольно новичок во всем этом.

Ответ №1:

Это должно быть что-то вроде этого:

 import urllib.request
from subprocess import Popen
import subprocess


def run_downloader():
    return subprocess.Popen(['C:ProgramFilesPrecisionOSTechEducationPOSTdownloader.exe'])

def ispageresponding():
    response_status_code = urllib.request.urlopen("http://www.stackoverflow.com").getcode()
    return response_status_code == 200:

if __name__ == '__main__':
    if ispageresponding() == True:
        run_downloader()
  

Обратите внимание, что функция подключения к Интернету вызывается в инструкции if и не находится внутри той же функции. Также, если вы используете python3, вам следует использовать urllib.request lib.