«Закрытие интернет-соединения» на другой компьютер python 2.7 - PullRequest
0 голосов
/ 12 февраля 2019

Мне нужно запрограммировать в py 2.7 функцию, которая
, когда активна, закрывает все подключения к интернету клиента (это соединение сокета сервер-клиент)

Поскольку я не могу просто сделатьклиент выключил интернет (потому что тогда мы не сможем с ним общаться)
Я подумал запустить поток.Когда он активен (когда сервер отправляет клиенту «close_internet»), поток запускает функцию true, которая закрывает все браузеры (и, таким образом, «закрывает» свое интернет-соединение).У меня будет список известных браузеров (не всех), которые поток будет активно закрывать.Эта строка кода закрывает любой процесс по имени:

import os
import threading


def close_internet():
    while 1:
        try:
            os.system('taskkill /f /im MicrosoftEdge.exe')
        except:
            pass

threading.Thread(target=close_internet, args=()).start()

Когда я запускаю этот код, он работает, закрывая проводник, когда я открываю его (проводник только для тестирования, вы можете изменить на chrome.exe или firefox.exe)
Тем не менее, в консоли все время выдаются страшные ошибки:

ERROR: The process "MicrosoftEdge.exe" not found.
ERROR: The process "MicrosoftEdge.exe" not found.
ERROR: The process "MicrosoftEdge.exe" not found.
ERROR: The process "MicrosoftEdge.exe" not found.
ERROR: The process "MicrosoftEdge.exe" not found.
ERROR: The process "MicrosoftEdge.exe" not found.

Что я могу сделать?Мне нужна только эта программа для работы в фоновом режиме, чтобы пользователь не заметил этих ошибок.Ошибки появляются (что неудивительно), когда у меня нет открытого проводника.
Когда он у меня открыт, он работает нормально и печатает:

ERROR: The process "MicrosoftEdge.exe" not found.
ERROR: The process "MicrosoftEdge.exe" not found.
SUCCESS: The process "MicrosoftEdge.exe" with PID 10808 has been terminated. # <-- this line
ERROR: The process "MicrosoftEdge.exe" not found.

Функция программируется на стороне клиента!

Как это исправить?
И, во-вторых, это правильный способ закрыть процесс по его имени?это эффективно?или есть более эффективный способ закрыть процесс (может быть, использование его PID делает его быстрее ...) Я хотел бы услышать ваш совет.

Спасибо!

1 Ответ

0 голосов
/ 12 февраля 2019

Попробуйте использовать модуль подпроцесса.Я не думаю, что вам нужно Threading для этой задачи.

Вот код, который я использую, чтобы открыть проводник Windows и выделить файл.

subprocess.Popen(r'explorer /select, %s%s'%(self.cwd, ofile))

Это должно быть легко изменить для вашегозадача.Кроме того, этот код предполагает, что Edge открыт и имя процесса - MicrosoftEdge.exe.Ничего не думайте и посмотрите, сможете ли вы получить список запущенных процессов, использующих python, просмотрите этот список и проверьте, открыто ли уже закрытое приложение. Здесь - это ссылка с некоторой информацией о получении списка процессов, работающих в Windows.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...