3种Python恶搞脚本,医院的WiFi实在太快了
我那天躺在医院病床上输液,左手吊着瓶子,右手抱着电脑,抬头一看——免费 WiFi,满格,测速一跑,嗯,真的比我家里还快一点点… 那一瞬间的心情你懂吧:住院的不爽,被 WiFi 稍微安慰了一下。
但问题来了:网太快,人容易闲得慌。作为一个写代码的,手一痒,就开始想:要不…写几段小脚本自娱自乐一下?也顺便“恶搞”下这个过于良心的医院 WiFi。
下面这 3 个小脚本,全是本地玩的,不撸别人机器、不搞医院网络,纯属自嗨。你要真拿去玩,记得只在自己设备上整活,别祸害别人哈。
一、假装在下载一个宇宙级大文件:网速装X进度条
场景是这样的:你坐在输液椅上,一边打点滴,一边开着电脑。护士一来:“你这个小伙子看着挺忙啊,都住院了还在干活?” 你轻轻一侧身,露出一个正在“以 98MB/s 疯狂下载”的终端窗口——专业感一下就来了。
其实这个脚本啥也没下载,就是个假的进度条 + 网速显示。
脚本效果
终端里显示一个彩条(其实是字符),从 0% 慢慢走到 100% 旁边伪造“当前速度”“已下载大小”“剩余时间” 全程只是在 time.sleep(),对网络零压力
代码示例:fake_download.py
import time
import random
import sys
defformat_size(mb: float) -> str:
"""把 MB 换算成人类能看懂的字符串,比如 1.23 GB"""
if mb < 1024:
returnf"{mb:.2f} MB"
gb = mb / 1024
returnf"{gb:.2f} GB"
deffake_download(total_mb: int = 20480):
"""
假装在下载一个 20G 的文件,其实就是在终端画进度条。
total_mb:虚构的文件大小(单位:MB)
"""
downloaded = 0.0
bar_len = 40# 进度条宽度
start_time = time.time()
while downloaded < total_mb:
# 每一轮“下载”一点随机大小的数据
chunk = random.uniform(10, 200) # 一次下 10~200MB,纯瞎编
downloaded = min(downloaded + chunk, total_mb)
# 计算进度、网速、剩余时间
percent = downloaded / total_mb
elapsed = time.time() - start_time
speed = downloaded / elapsed if elapsed > 0else0# MB/s
remain_mb = total_mb - downloaded
remain_sec = remain_mb / speed if speed > 0else0
# 画进度条
filled_len = int(bar_len * percent)
bar = "█" * filled_len + "-" * (bar_len - filled_len)
line = (
f"\r[{bar}] "
f"{percent * 100:6.2f}% "
f"Speed: {speed:6.2f} MB/s "
f"{format_size(downloaded)}/{format_size(total_mb)} "
f"ETA: {remain_sec:5.1f}s"
)
# 输出并刷新
sys.stdout.write(line)
sys.stdout.flush()
# 偶尔快一点,偶尔慢一点,模拟网速波动
time.sleep(random.uniform(0.05, 0.25))
print("\n下载完成(假的)🎉")
if __name__ == "__main__":
# 住院太无聊,可以改改 total_mb,自定义一个更离谱的大小
fake_download(total_mb=51200) # 比如 50GB
你把这个脚本跑起来,再顺手开个 Excel 放在旁边,别人路过就只会觉得: “卧槽这人住院都在下生产数据库备份,太拼了。”
二、假装在排查线上事故:自嗨版“日志风暴”终端
医院输液区最怕什么?家属突然走过来对你说:“你怎么还有心情刷剧?” 这时候就轮到第二个脚本登场——在终端刷一屏一屏的“系统日志”。
这个脚本干啥
循环打印带时间戳的“日志” 随机组合服务名 / traceId / 日志级别 / 文案 看起来像在排查一个大型分布式系统的故障 实际上你可能在旁边用手机刷短视频…
代码示例:fake_logs.py
import random
import time
from datetime import datetime
LEVELS = ["INFO", "DEBUG", "WARN", "ERROR"]
SERVICES = [
"order-service",
"payment-service",
"user-service",
"gateway",
"inventory-service",
"notify-service",
]
MESSAGES = [
"request handled successfully",
"db query slow, cost={} ms",
"calling downstream api /{} failed, retrying...",
"cache miss, reloading from db",
"user {} not found, use anonymous profile",
"feign client timeout, traceId={}",
"start async task jobId={}",
"MQ message sent, topic=order.event offset={}",
"lock acquired, key=order:{}",
"unexpected status code: {} from {}",
]
PATHS = [
"createOrder",
"pay",
"login",
"getUserInfo",
"listProducts",
"refund",
]
STATUS_CODES = [200, 201, 400, 401, 403, 500, 502, 504]
defrandom_trace_id() -> str:
return"".join(random.choice("0123456789abcdef") for _ in range(16))
defrandom_ms() -> int:
return random.randint(10, 1500)
defrandom_user_id() -> int:
return random.randint(10000, 99999)
defrandom_job_id() -> str:
returnf"JOB-{random.randint(100000, 999999)}"
defrandom_offset() -> int:
return random.randint(1000000, 9999999)
deflog_once():
now = datetime.now().strftime("%Y-%m-%d %H:%M:%S.%f")[:-3]
level = random.choices(LEVELS, weights=[60, 15, 20, 5])[0]
service = random.choice(SERVICES)
msg_tpl = random.choice(MESSAGES)
# 简单模板替换
if"{} ms"in msg_tpl:
msg = msg_tpl.format(random_ms())
elif"/{}"in msg_tpl:
msg = msg_tpl.format(random.choice(PATHS))
elif"user {}"in msg_tpl:
msg = msg_tpl.format(random_user_id())
elif"traceId={}"in msg_tpl:
msg = msg_tpl.format(random_trace_id())
elif"jobId={}"in msg_tpl:
msg = msg_tpl.format(random_job_id())
elif"offset={}"in msg_tpl:
msg = msg_tpl.format(random_offset())
elif"order:{}"in msg_tpl:
msg = msg_tpl.format(random.randint(1000000, 9999999))
elif"code: {}"in msg_tpl:
msg = msg_tpl.format(random.choice(STATUS_CODES), random.choice(SERVICES))
else:
msg = msg_tpl
print(f"{now}{level:<5} [{service}] {msg}")
defrun_fake_logs(lines: int = 300):
"""
模拟打印一堆系统日志。
lines: 日志条数
"""
for _ in range(lines):
log_once()
# 日志间隔有快有慢,就像真在处理请求一样
time.sleep(random.uniform(0.03, 0.18))
if __name__ == "__main__":
run_fake_logs(lines=500)
你可以把终端字体调小一点,让日志刷得满屏飞。 家属或者同事路过一看:
“哎呀你还在救火啊,那你忙你的忙你的。”
至于你到底在不在救火,只有你心里最清楚 😂
三、网速“体检报告”生成器:给医院 WiFi 做个假体检
本来是你在蹭医院 WiFi,人家什么都没说。 但你还是可以搞个“测速体检报告”,装出一副“我在严肃评估网络质量”的样子。
这个脚本会打印什么
随机生成:上行 / 下行网速、延迟、抖动、丢包 给出几句“诊断建议” 格式像一张小报告,适合截图发给朋友装逼
代码示例:net_report.py
import random
from datetime import datetime
defrandom_speed(min_mbps: float, max_mbps: float) -> float:
return round(random.uniform(min_mbps, max_mbps), 2)
defrandom_latency() -> float:
return round(random.uniform(5, 60), 1) # ms
defrandom_jitter() -> float:
return round(random.uniform(0.5, 20), 1)
defrandom_loss() -> float:
# 丢包率一般很低,控制在一个“看着合理”的范围
val = random.choice([0.0, 0.0, 0.0, random.uniform(0.1, 2.0)])
return round(val, 2)
defscore_by_speed(down: float, up: float, latency: float, loss: float) -> int:
score = 100
if down < 20:
score -= 15
if up < 10:
score -= 10
if latency > 40:
score -= 15
if loss > 0.5:
score -= 20
return max(0, min(100, score))
defadvice_by_score(score: int) -> str:
if score > 90:
return"网络状态优秀,看剧、开视频会完全没压力。"
elif score > 75:
return"网络良好,偶尔会有轻微波动,不影响日常使用。"
elif score > 60:
return"网络一般,大文件下载和高清视频可能会卡,建议错峰使用。"
else:
return"网络偏差,如非必要别作死下大型游戏更新。"
defgenerate_report():
now = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
# 你可以根据实际测速结果手动调整范围,这里纯随机
down = random_speed(30, 300) # 下行
up = random_speed(10, 80) # 上行
latency = random_latency()
jitter = random_jitter()
loss = random_loss()
score = score_by_speed(down, up, latency, loss)
advice = advice_by_score(score)
print("=" * 50)
print(" WiFi 网速体检报告(伪)")
print("=" * 50)
print(f"检测时间 : {now}")
print(f"连接环境 : 某三甲医院病房 WiFi")
print("-" * 50)
print(f"下行带宽 : {down:6.2f} Mbps")
print(f"上行带宽 : {up:6.2f} Mbps")
print(f"平均延迟 : {latency:6.1f} ms")
print(f"抖动 (Jitter): {jitter:6.1f} ms")
print(f"丢包率 : {loss:6.2f} %")
print("-" * 50)
print(f"综合评分 : {score}/100")
print("诊断结果 : ", advice)
print("=" * 50)
print("备注:本报告纯属娱乐用途,与真实网速无关。")
print("=" * 50)
if __name__ == "__main__":
generate_report()
你把这个报告截个图,发给朋友说:
“我替你们测过了,这家医院 WiFi 可以的,能住。”
对方一脸问号,你一脸认真。人生小确幸就是这么来的。
这类“恶搞脚本”,我的底线就两个:
只在自己设备上跑,不要往别人电脑上塞,更不要连到医院内部系统瞎搞,那就不是好玩,是作死了。 不做任何真正消耗网络、影响别人体验的东西,上面这三个都是本地自嗨,没有扫描、没有攻击、没有大流量。
你要是正好也被医院 WiFi“照顾”着,又无聊到抓狂,可以随便挑一个脚本改改变量、改改文案,往里加点你们组内的梗,比如把 order-service 改成你们真实的微服务名,效果更好。
行,我这边输液时间也差不多了,护士又来催我拔针… 有啥想一起整活的脚本,回头你再发我一眼,我帮你一起脑洞。
-END-
我为大家打造了一份RPA教程,完全免费:songshuhezi.com/rpa.html
虎哥作为一名老码农,整理了全网最全《python高级架构师资料合集》,总量高达650GB