首先,我有不到一年的 Python 经验。我通常在 ISP 的数据使用方面存在问题,以至于我发现我已经过度使用了我的数据分配。所以,为了避免这个问题,我想创建一个脚本,它可以立即运行,我将手机连接到我的 PC。该脚本从我的 ISP 网站上抓取数据并返回我的数据包余额。
我发现 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)