python and shell

为什么使用副 shell 脚本生成 Python 文件

PHPer 2025-09-23 6 0 0

你提到的“用主 shell 脚本先生成一个副的 shell 脚本,再让这个副的 shell 脚本去创建 python 的文件并运行做监控”的做法可能有以下几种原因:

动态配置:通过这种方式可以在运行时动态生成和配置 Python 脚本,根据不同的环境或参数生成不同的监控逻辑。

权限管理:在某些情况下,可能需要以不同的用户或权限运行 Python 脚本。通过生成副 shell 脚本来执行 Python 脚本,可以更灵活地管理权限。

模块化设计:将生成 Python 脚本的逻辑放在副 shell 脚本中,可以使主脚本更加简洁和模块化,便于维护和扩展。

隔离作用域:副 shell 脚本可以提供一个独立的作用域,避免变量和函数命名冲突,提高代码的健壮性。

示例:使用副 shell 脚本生成 Python 文件

假设我们有一个主 shell 脚本 main.sh 和一个副 shell 脚本 sub.sh,main.sh 会调用 sub.sh 来生成并运行 Python 脚本。

main.sh

#!/bin/bash

# 定义常量和变量
PYTHON_SCRIPT="/tmp/python_monitor.py"
SPEED_THRESHOLD_KBPS=200.0
CHECK_INTERVAL=5

# 生成副 shell 脚本
cat << EOF > /tmp/sub.sh
#!/bin/bash

# 生成 Python 监控脚本
cat << EOP > $PYTHON_SCRIPT
#!/usr/bin/env python3
import sys
import time
import re

LOG_FILE = sys.argv[1]
THRESHOLD_KBPS = float(sys.argv[2])
CHECK_INTERVAL = float(sys.argv[3])
ZERO_SPEED_THRESHOLD = 5

def parse_log_speed(log_file):
    with open(log_file, 'r') as file:
        content = file.read()
        match = re.search(r'\[(Python Monitor)\] 当前速度: (\d+\.\d+) KB/s', content)
        if match:
            return float(match.group(2))
        else:
            return 0.0

def main():
    zero_speed_count = 0

    while True:
        speed = parse_log_speed(LOG_FILE)
        print(f"[Python Monitor] 当前速度: {speed:.1f} KB/s, 阈值: {THRESHOLD_KBPS} KB/s", file=sys.stderr)

        if speed > 0 and speed < THRESHOLD_KBPS:
            print("[Python Monitor] 速度过低,触发换源信号!", file=sys.stderr)
            sys.exit(1)
        elif speed == 0:
            zero_speed_count += 1
            if zero_speed_count >= ZERO_SPEED_THRESHOLD:
                print("[Python Monitor] 连续多次检测到零速度,触发换源信号!", file=sys.stderr)
                sys.exit(1)
        else:
            zero_speed_count = 0

        time.sleep(CHECK_INTERVAL)

if __name__ == '__main__':
    try:
        main()
    except KeyboardInterrupt:
        sys.exit(0)
EOP

# 确保 Python 脚本可执行
chmod +x $PYTHON_SCRIPT

# 运行 Python 监控脚本
$PYTHON_SCRIPT "\$DOWNLOAD_LOG" "$SPEED_THRESHOLD_KBPS" "$CHECK_INTERVAL"
EOF

# 确保副 shell 脚本可执行
chmod +x /tmp/sub.sh

# 运行副 shell 脚本
/tmp/sub.sh

这样,main.sh 会生成并运行 sub.sh,而 sub.sh 会生成并运行 Python 监控脚本。这种设计使得整个流程更加灵活和模块化。 ...

立即注册

更新于:2025-09-23 03:55:12
    您需要登录后才可以评论。 立即注册
    相关内容

    python and shell

    为什么使用副 shell 脚本生成 Python 文件

    Shell脚本学习过程中遇到问题整理

    如何检测这种格式知道这个是不合法的CLI参数

    学习shell脚本编写时遇到问题和解决方法整理

    SyntaxError: f-string: expecting '}' 关键修复:print(f\"GPU设备: .....

    setup_train_env.sh: : commitBuffer: invalid argument (cannot ...

    python 和 conda

    启动powershell,conda 自动激活base

    python 报错整理2

    给出一份「Python 中常见 import 名称 与 pip install 名称不一致」的速查表

    Windows用Conda创建环境报错 CondaToSNonInteractiveError: Terms of Se...

    快速验证顺序是否被改

    推荐内容

    怎样使用V2Ray代理和SSTap玩如魔兽世界/绝地求生/LOL台服/战地3/黑色沙漠/彩...

    sstap游戏代理教程 从此玩如魔兽世界/绝地求生/LOL台服/战地3/黑色沙漠/彩虹六...

    BT磁力搜索网站汇总和找不到的资源

    什么是磁力链接,您如何使用?

    Z-Library:全球最大的数字图书馆/含打不开的解决方案/镜像

    使用V2Ray的mKCP协议加速游戏

    v2rayN已停止工作

    【车险课堂】什么是无赔款优待系数ncd,你“造”吗?