|-转 为什么使用副 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
相关内容
AI和Python 学习整理
AudioSeparationGUI 对输入的音频,自动根据说话人进行分类 20250817
SoloSpeech 项目安装和运行测试 20250817
python 多项目部署 优先考虑用Anaconda
espnet 声音分离
ClearerVoice-Studio 安装测试遇到的问题,安装pysptk一直失败
uvr5 bs roformer 爆显存以及关于huggingface的国内镜像hf-mirror.com
用Kimi编程
Studio One 调试插件Techivation AI-Rack 一键智能混音
在hf-mirror.com模型镜像站用代码下载模型遇到报错 speaker-diarization模型不...
用腾讯元宝编程
Conda国内镜像源
数字对象标识符 (DOI)
在创建conda环境时,如果不指定Python版本,conda将不会默认安装Python。
whisperx 的使用 音频处理
Win10系统 Trae的使用 关于powershell报错: 因为在此系统上禁止运行脚本
warp的使用
AI编程工具比较
FastApi
python 报错整理2
给出一份「Python 中常见 import 名称 与 pip install 名称不一致」的速查表
Windows用Conda创建环境报错 CondaToSNonInteractiveError: Terms of Se...
快速验证顺序是否被改
Python 学习整理2
fastapi-speaker-extractor whisperx 项目报错 ValueError: The chosen ...
python报错 UnicodeEncodeError: 'gbk' codec can't encode character '\u...
python whisperx 报错 in load_align_model raise ValueError(f'The ch...
pyannote/embedding 模型是真难引入模型
Trae 或者是我自己 莫名奇妙创建了个文件,影响了项目代码的运行。
WhisperX 无法加载模型
HUGGINGFACE_HUB_CACHE 设置错误导致的问题
Trae的bug太多了,怪不得免费
通义之旅
通义之旅2
目标说话人声音提取模型训练的思路
python报错 can't convert cuda:0 device type tensor to numpy. Use Tenso...
Expected all tensors to be on the same device, but found at least two ...
腾讯元宝推荐的项目结构(音频处理项目)
音频处理项目fse
各种python 相关命令
python 报错 SyntaxError: 'return' outside function
python常用命令
腾讯编程助手
python一些扩展兼容安装的处理方案
python 和 conda
启动powershell,conda 自动激活base
推荐内容