Как испустить сигнал GObject один раз?

Во-первых, у меня есть опыт работы с Python менее одного года. У меня обычно возникают проблемы с использованием данных с моим интернет-провайдером, так что я поздно обнаруживаю, что я перерасходовал с распределением данных. Итак, чтобы обойти эту проблему, я подумал о создании сценария, который будет запускаться немедленно, и я подключу свой телефон к ПК. Скрипт извлекает данные с веб-сайта моего провайдера и возвращает баланс данных.

Я обнаружил, что pyudev полезен в таком случае, когда я хотел бы постоянно следить за моей активностью USB-портов. Часть сценария, как показано ниже. Проблема в identify_phone вызывается 3 раза (из моего опыта), который имеет тенденцию вызывать метод очистки 3 раза, тогда как я бы хотел, чтобы он вызывался один раз. Я попытался использовать глобальное значение, но оно не работает, как ожидалось. Я искал в Интернете, но на Pyudev есть ограниченные ресурсы.

Буду признателен за любую помощь (в том числе любые изменения в моем коде:P)

import glib
import re
import subprocess
import requests
import bs4
import datetime
import sys
from selenium import webdriver

from pyudev import Context, Monitor

def identify_phone(observer, device):
    global last_updated
    current_time = datetime.datetime.now()
    time_diff = current_time - last_updated

    if time_diff.seconds < 10:#300:
        pass
    else:
        #print('\Checking USB ports...')
        try:
            tout = subprocess.check_output("lsusb | grep 1234:1234", shell=True) #check if specific usb device (phone) is connected
        except subprocess.CalledProcessError:
            tout = None
        if tout is not None: 
            device_found = True
        else:
            device_found = False
        last_updated = datetime.datetime.now()

        get_network_data()# scrapes ISP website

try:
    device_found = False
    last_updated = datetime.datetime.now()
    try:
        from pyudev.glib import MonitorObserver

    except ImportError:
        from pyudev.glib import GUDevMonitorObserver as MonitorObserver

    context = Context()
    monitor = Monitor.from_netlink(context)

    monitor.filter_by(subsystem='usb')
    observer = MonitorObserver(monitor)

    observer.connect('device-added', identify_phone)
    monitor.start()

    glib.MainLoop().run()

except KeyboardInterrupt:
    print('\nShutdown requested.\nExiting gracefully...')
    sys.exit(0)

0 ответов

Другие вопросы по тегам