#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.