|-转 为什么使用副 shell 脚本生成 Python 文件
你提到的“用主 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...
快速验证顺序是否被改
推荐内容