### File Naming Convention Examples Source: https://docs.taskpyro.cn/professional/persistent-files.html Examples of compliant and non-compliant file naming patterns. ```text ✅ 好的命名: - user_data_20241225.csv - config_backup_v1.2.json - spider_output_001.json - database_backup_20241225_120000.db ❌ 不好的命名: - 数据.csv - config(1).json - 备份文件 - 最终版.db - test11111.txt ``` -------------------------------- ### 验证Docker运行状态 Source: https://docs.taskpyro.cn/docker 通过运行hello-world容器确认Docker守护进程工作正常。 ```bash docker --version docker-compose --version sudo docker run hello-world # 验证Docker是否正常运行 ``` -------------------------------- ### 在Ubuntu/Debian上安装Docker和Docker Compose Source: https://docs.taskpyro.cn/docker 通过apt包管理器添加Docker官方仓库并安装相关组件。 ```bash # 安装Docker sudo apt-get update sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" sudo apt-get update sudo apt-get install -y docker-ce docker-ce-cli containerd.io sudo systemctl start docker sudo systemctl enable docker # 安装Docker Compose sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose ``` -------------------------------- ### 在RedHat/CentOS上安装Docker和Docker Compose Source: https://docs.taskpyro.cn/docker 使用yum包管理器安装Docker引擎并配置Docker Compose二进制文件。 ```bash # 安装Docker sudo yum update -y sudo yum install -y yum-utils device-mapper-persistent-data lvm2 sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo yum install -y docker-ce docker-ce-cli containerd.io sudo systemctl start docker sudo systemctl enable docker # 安装Docker Compose sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose ``` -------------------------------- ### 在 Python 脚本中获取环境变量 Source: https://docs.taskpyro.cn/professional/setting.html 通过 os.getenv 方法读取系统设置的全局环境变量,适用于管理数据库连接信息、API 密钥及其他配置参数。 ```python import os # 获取数据库连接信息 db_host = os.getenv('DB_HOST', 'localhost') db_user = os.getenv('DB_USER') db_password = os.getenv('DB_PASSWORD') db_name = os.getenv('DB_NAME') # 获取API密钥 api_key = os.getenv('API_KEY') api_secret = os.getenv('API_SECRET') # 获取配置信息 log_level = os.getenv('LOG_LEVEL', 'INFO') max_retry = int(os.getenv('MAX_RETRY', '3')) ``` -------------------------------- ### 排查容器启动失败 Source: https://docs.taskpyro.cn/professional/install.html 检查 Docker 服务状态及数据目录权限的命令。 ```bash systemctl status docker ``` ```bash ls -l /opt/taskpyrodata ``` -------------------------------- ### 进入 Docker 容器环境 Source: https://docs.taskpyro.cn/guide/faq.html 使用 docker exec 命令进入正在运行的容器以执行管理操作。 ```bash docker exec -it /bin/bash ``` -------------------------------- ### 导航至工作节点虚拟环境目录 Source: https://docs.taskpyro.cn/professional/virtual.html 在Windows工作节点上进入虚拟环境目录。 ```bash cd 安装目录\virtual_environments\ ``` -------------------------------- ### 配置工作节点环境变量 Source: https://docs.taskpyro.cn/professional/node.html 修改.env文件以设置服务端口和Python解释器路径。 ```text SERVER_PORT=8001 PYTHON_EXECUTABLE=D:\Programs\Python\Python311\python.exe ``` -------------------------------- ### 进入容器并管理 Python 环境 Source: https://docs.taskpyro.cn/professional/faq.html 通过 Docker 命令进入容器并导航至虚拟环境目录以执行包管理操作。 ```bash docker exec -it /bin/bash ``` ```bash cd .. # 回根目录 ``` ```bash cd /static/taskProjectVenvs/ ``` -------------------------------- ### 排查节点连接故障 Source: https://docs.taskpyro.cn/professional/node.html 通过网络诊断命令检查节点连通性及端口监听状态。 ```bash # 检查网络连通性 ping master-node-ip telnet master-node-ip 8000 # 检查防火墙设置 netstat -an | grep 8001 ``` -------------------------------- ### 启动 Linux 工作节点 Source: https://docs.taskpyro.cn/professional/install.html 在项目目录中使用 Docker Compose 启动服务。 ```bash docker-compose up -d ``` -------------------------------- ### 配置 Linux 工作节点端口 Source: https://docs.taskpyro.cn/professional/install.html 修改 .env 文件以设置服务器端口。 ```text SERVER_PORT=8001 ``` -------------------------------- ### 运行Docker安装修复脚本 Source: https://docs.taskpyro.cn/docker 当常规安装失败时,可尝试使用第三方镜像脚本进行安装。 ```bash bash <(curl -sSL https://linuxmirrors.cn/docker.sh) ``` -------------------------------- ### 验证Docker安装版本 Source: https://docs.taskpyro.cn/docker 检查当前系统中安装的Docker及Docker Compose版本信息。 ```bash docker --version docker-compose --version ``` -------------------------------- ### 在openEuler上安装Docker和Docker Compose Source: https://docs.taskpyro.cn/docker 利用dnf包管理器安装Docker并配置Docker Compose。 ```bash # 安装Docker sudo dnf update -y sudo dnf install -y docker sudo systemctl start docker sudo systemctl enable docker # 安装Docker Compose sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose ``` -------------------------------- ### 更新 TaskPyro 服务 Source: https://docs.taskpyro.cn/changelog 通过 Docker Compose 拉取最新镜像并重启服务以完成系统升级。 ```bash # 拉取最新镜像 docker-compose pull # 重启服务 docker-compose up -d ``` -------------------------------- ### 使用一键安装脚本 Source: https://docs.taskpyro.cn/guide/install.html 通过一键脚本自动完成 Docker 环境检查与 TaskPyro 部署。国内用户推荐使用 Gitee 镜像源。 ```bash # 下载并执行一键安装脚本 curl -fsSL https://gitee.com/taskPyroer/taskpyrodocker/raw/master/taskpyro-manager.sh -o taskpyro-manager.sh && chmod +x taskpyro-manager.sh && ./taskpyro-manager.sh ``` ```bash # 使用 GitHub 镜像源下载脚本 curl -fsSL https://raw.githubusercontent.com/taskPyroer/taskpyro/main/taskpyro-manager.sh -o taskpyro-manager.sh && chmod +x taskpyro-manager.sh && ./taskpyro-manager.sh ``` -------------------------------- ### 升级 TaskPyro 服务 Source: https://docs.taskpyro.cn/professional/install.html 拉取最新镜像并重启服务以完成升级。 ```bash docker-compose pull docker-compose up -d ``` -------------------------------- ### Selenium 网页自动化配置 Source: https://docs.taskpyro.cn/guide/codesample.html 在容器环境中使用 Selenium 时,必须配置无沙箱、无头模式及禁用 GPU 等参数以确保稳定性。 ```python from selenium import webdriver from selenium.webdriver.chrome.service import Service import os service = Service() options = webdriver.ChromeOptions() options.add_argument('--no-sandbox') options.add_argument('--headless') options.add_argument('--disable-gpu') options.add_argument('--disable-software-rasterizer') options.add_argument('--disable-dev-shm-usage') driver = webdriver.Chrome(service=service, options=options) try: driver.get('https://www.bilibili.com') title = driver.title print(f"B 站网站的标题是: {title}") except Exception as e: print(f"发生错误: {e}") finally: driver.quit() ``` -------------------------------- ### 导航至 Python 虚拟环境目录 Source: https://docs.taskpyro.cn/guide/faq.html 进入容器后,切换到指定的 Python 虚拟环境目录以进行包管理。 ```bash cd .. # 回根目录 ``` ```bash cd /static/taskProjectVenvs/ ``` -------------------------------- ### 通过代码仓库拉取部署 Source: https://docs.taskpyro.cn/guide/install.html 克隆代码仓库并使用 docker-compose 启动服务。 ```bash # 1. 克隆代码仓库 git clone https://github.com/taskPyroer/taskpyro.git # 2. 进入v1版本目录 cd taskpyro/v1 # 3. 启动服务 docker-compose up -d ``` ```bash # 1. 克隆代码仓库 git clone https://gitee.com/taskPyroer/taskpyrodocker.git # 2. 进入v1版本目录 cd taskpyrodocker/v1 # 3. 启动服务 docker-compose up -d ``` -------------------------------- ### 使用持久化文件系统保存数据 Source: https://docs.taskpyro.cn/professional/faq.html 通过内置的持久化路径访问文件,无需手动配置 Docker 卷映射。 ```python # 保存文件到持久化存储 file_path = '/app/../static/persistentMappedAddress/your-folder/data.txt' with open(file_path, 'w') as f: f.write('持久化数据') ``` -------------------------------- ### 卸载 TaskPyro 服务 Source: https://docs.taskpyro.cn/guide/install.html 停止服务并根据需要选择是否删除持久化数据目录。 ```bash # 停止并删除容器 docker-compose down # 如果需要同时删除数据(谨慎操作!) rm -rf /opt/taskpyrodata ``` -------------------------------- ### Python 持久化文件读写操作 Source: https://docs.taskpyro.cn/professional/persistent-files.html 使用 os.path.join 构建路径并执行标准文件 I/O 操作。确保目标目录存在且具有相应的读写权限。 ```python import os # 基础路径 BASE_PERSISTENT_PATH = '/app/../static/persistentMappedAddress' # 访问文件示例 file_path = os.path.join(BASE_PERSISTENT_PATH, 'test', '1.txt') # 读取文件内容 with open(file_path, 'r', encoding='utf-8') as f: content = f.read() # 写入文件 output_path = os.path.join(BASE_PERSISTENT_PATH, 'output', 'result.txt') with open(output_path, 'w', encoding='utf-8') as f: f.write('保存数据到持久化存储') ``` -------------------------------- ### 排查后端 API 问题 Source: https://docs.taskpyro.cn/professional/install.html 检查后端容器状态及日志的常用命令。 ```bash docker-compose ps api ``` ```bash docker-compose logs api ``` -------------------------------- ### 克隆工作节点程序 Source: https://docs.taskpyro.cn/professional/node.html 从GitHub或Gitee获取工作节点源代码。 ```bash git clone https://github.com/taskPyroer/taskpyro.git ``` ```bash cd v2/windows-server ``` ```bash git clone https://gitee.com/taskPyroer/taskpyrodocker.git ``` ```bash cd v2/windows-server ``` -------------------------------- ### Directory Structure Template Source: https://docs.taskpyro.cn/professional/persistent-files.html A recommended hierarchical layout for organizing project files, datasets, backups, logs, and shared resources. ```text persistentMappedAddress/ ├── projects/ # 项目文件 │ ├── project-a/ │ │ ├── src/ # 源代码 │ │ ├── config/ # 配置文件 │ │ └── output/ # 输出文件 │ └── project-b/ ├── datasets/ # 数据集 │ ├── raw/ # 原始数据 │ ├── processed/ # 处理后的数据 │ └── temp/ # 临时数据 ├── backups/ # 备份文件 │ ├── database/ # 数据库备份 │ ├── config/ # 配置备份 │ └── code/ # 代码备份 ├── logs/ # 日志文件 │ ├── 2024/ │ ├── 2025/ │ └── archive/ # 归档日志 ├── shared/ # 共享文件 │ ├── templates/ # 模板文件 │ └── resources/ # 公共资源 └── temp/ # 临时文件(定期清理) ``` -------------------------------- ### 配置 2.0 版本 docker-compose.yml Source: https://docs.taskpyro.cn/professional/upgrade.html 从 1.+ 版本升级时,需将 frontend 和 api 镜像版本更新为 2.0。 ```yaml version: '3' services: frontend: image: crpi-7ub5pdu5y0ps1uyh.cn-hangzhou.personal.cr.aliyuncs.com/taskpyro/taskpyro-enterprise-frontend:2.0 # 原有的保持不变 api: image: crpi-7ub5pdu5y0ps1uyh.cn-hangzhou.personal.cr.aliyuncs.com/taskpyro/taskpyro-enterprise-api:2.0 # 原有的保持不变 ``` -------------------------------- ### 手动创建配置文件部署 Source: https://docs.taskpyro.cn/guide/install.html 手动创建项目目录、docker-compose.yml 和 .env 文件进行部署。 ```bash # 创建并进入项目目录 mkdir -p taskpyro cd taskpyro ``` ```yaml version: '3' services: frontend: image: crpi-7ub5pdu5y0ps1uyh.cn-hangzhou.personal.cr.aliyuncs.com/taskpyro/taskpyro-frontend:1.0 ports: - "${FRONTEND_PORT:-7789}:${FRONTEND_PORT:-7789}" environment: - PORT=${FRONTEND_PORT:-7789} - SERVER_NAME=${SERVER_NAME:-localhost} - BACKEND_PORT=${BACKEND_PORT:-8000} - API_URL=http://${SERVER_NAME}:${BACKEND_PORT:-8000} - TZ=Asia/Shanghai env_file: - .env depends_on: - api api: image: crpi-7ub5pdu5y0ps1uyh.cn-hangzhou.personal.cr.aliyuncs.com/taskpyro/taskpyro-api:1.0 ports: - "${BACKEND_PORT:-8000}:${BACKEND_PORT:-8000}" environment: - PORT=${BACKEND_PORT:-8000} - PYTHONPATH=/app - CORS_ORIGINS=http://localhost:${FRONTEND_PORT:-7789},http://127.0.0.1:${FRONTEND_PORT:-7789} - TZ=Asia/Shanghai - WORKERS=${WORKERS:-1} volumes: - /opt/taskpyrodata/static:/app/../static - /opt/taskpyrodata/logs:/app/../logs - /opt/taskpyrodata/data:/app/data env_file: - .env init: true restart: unless-stopped ``` ```text # 前端服务端口 FRONTEND_PORT=8080 # 后端服务端口 BACKEND_PORT=9000 # 服务器域名或IP(默认localhost,通常不需要修改) SERVER_NAME=localhost # 后端工作进程数 WORKERS=1 ``` ```bash # 在项目目录中执行 docker-compose up -d ``` -------------------------------- ### 配置 Docker 数据持久化 Source: https://docs.taskpyro.cn/guide/faq.html 在 docker-compose.yml 中添加卷映射,将宿主机目录挂载到容器内的 /data 目录以实现数据持久化。 ```yaml volumes: - /opt/taskpyrodata:/data # 映射宿主机的 /opt/taskpyrodata 目录到容器的 /data 目录 ``` -------------------------------- ### Manage JSON and YAML Configurations Source: https://docs.taskpyro.cn/professional/persistent-files.html Provides methods to load and save configuration files in JSON and YAML formats within a persistent directory. ```python import json import yaml from pathlib import Path class ConfigManager: def __init__(self): self.config_dir = Path('/app/../static/persistentMappedAddress/configs') self.config_dir.mkdir(parents=True, exist_ok=True) def save_json_config(self, config_data, filename): """保存 JSON 配置""" file_path = self.config_dir / f'{filename}.json' with open(file_path, 'w', encoding='utf-8') as f: json.dump(config_data, f, indent=2, ensure_ascii=False) return str(file_path) def load_json_config(self, filename): """加载 JSON 配置""" file_path = self.config_dir / f'{filename}.json' if not file_path.exists(): raise FileNotFoundError(f'配置文件不存在:{file_path}') with open(file_path, 'r', encoding='utf-8') as f: return json.load(f) def save_yaml_config(self, config_data, filename): """保存 YAML 配置""" file_path = self.config_dir / f'{filename}.yaml' with open(file_path, 'w', encoding='utf-8') as f: yaml.dump(config_data, f, allow_unicode=True, default_flow_style=False) return str(file_path) ``` -------------------------------- ### 项目查询指令 Source: https://docs.taskpyro.cn/professional/ai-robot.html 用于获取项目列表、详情及目录结构信息的查询指令。 ```text @TaskPyro-AI 助手 查看所有项目 @TaskPyro-AI 助手 查看项目 XXX 的详情 @TaskPyro-AI 助手 获取项目 XXX 的目录结构 ``` -------------------------------- ### TaskPyro 爬虫运行命令 Source: https://docs.taskpyro.cn/guide/codesample.html 在 TaskPyro 任务配置中使用的执行命令,用于启动爬虫并将抓取结果导出为 JSON 文件。 ```bash scrapy crawl quotes -o quotes.json ``` -------------------------------- ### 配置容器间共享文件路径 Source: https://docs.taskpyro.cn/professional/persistent-files.html 在多个容器间访问共享数据时,使用统一的持久化路径进行配置。 ```python # 所有容器都使用相同的路径 path = '/app/../static/persistentMappedAddress/shared/data.txt' ``` -------------------------------- ### 排查前端服务问题 Source: https://docs.taskpyro.cn/professional/install.html 检查前端容器状态及日志的常用命令。 ```bash docker-compose ps frontend ``` ```bash docker-compose logs frontend ``` -------------------------------- ### 导航至主控节点虚拟环境目录 Source: https://docs.taskpyro.cn/professional/virtual.html 进入指定虚拟环境的存储路径。 ```bash cd /static/taskProjectVenvs/ ``` -------------------------------- ### JS 逆向项目结构示例 Source: https://docs.taskpyro.cn/guide/codesample.html 展示了包含 JS 实现、Python 调用入口及 Node.js 依赖配置的项目目录结构。 ```text js_reverse_demo/ ├── decrypt-v.js # JS加密解密实现 ├── main.py # Python调用示例 ├── package.json # Node.js项目配置 ├── package-lock.json # 依赖版本锁定 └── node_modules/ # Node.js依赖包 └── crypto-js/ # AES加密库 ``` -------------------------------- ### 环境查询指令 Source: https://docs.taskpyro.cn/professional/ai-robot.html 用于查询环境配置、Python 版本及依赖包信息的指令。 ```text @TaskPyro-AI 助手 查看所有环境配置 @TaskPyro-AI 助手 项目 XXX 使用的是什么 Python 版本? @TaskPyro-AI 助手 查看已安装的依赖包 ``` -------------------------------- ### Python 调用 JS 加解密函数 Source: https://docs.taskpyro.cn/guide/codesample.html 使用 execjs 库加载 JS 文件并调用其中定义的加密解密函数。 ```python # main.py import execjs with open('decrypt-v.js', 'r') as f: jscontent = f.read() context= execjs.compile(jscontent) # 调用加密和解密函数 encrypted_message = context.call('encryptMessage', 'Hello, World!', 'secret-key') print(f"Encrypted Message: {encrypted_message}") decrypted_message = context.call('decryptMessage', encrypted_message, 'secret-key') print(f"Decrypted Message: {decrypted_message}") ``` -------------------------------- ### 通过 cURL 触发外部流程 Source: https://docs.taskpyro.cn/professional/workflow.html 使用 HTTP POST 请求调用 TaskPyro 的流程 Hook 地址,并传递输入数据。 ```bash curl -X POST https://IP:PORT/workflows/hooks/xxx-token-xxx \ -H "Content-Type: application/json" \ -d '{"input_data": {"url": "https://example.com"}}' ``` -------------------------------- ### Storage Optimization Utilities Source: https://docs.taskpyro.cn/professional/persistent-files.html Functions for compressing files using gzip and cleaning up files older than a specified number of days. ```python import gzip import shutil from datetime import datetime, timedelta def compress_file(file_path, output_path=None): """压缩文件""" if output_path is None: output_path = f'{file_path}.gz' with open(file_path, 'rb') as f_in: with gzip.open(output_path, 'wb') as f_out: shutil.copyfileobj(f_in, f_out) return output_path def cleanup_old_files(directory, days=30): """清理指定天数前的文件""" from pathlib import Path dir_path = Path(directory) cutoff_time = datetime.now() - timedelta(days=days) for file_path in dir_path.rglob('*'): if file_path.is_file(): mtime = datetime.fromtimestamp(file_path.stat().st_mtime) if mtime < cutoff_time: file_path.unlink() print(f'删除旧文件:{file_path}') ``` -------------------------------- ### 企业微信机器人配置信息 Source: https://docs.taskpyro.cn/professional/ai-robot.html 在 TaskPyro 系统中配置企业微信机器人所需的凭证信息。 ```text 机器人 ID (Bot ID): aibOtUxq7t5xxxxxxxxxxxx Secret: 已配置,输入以修改 对话模型:glm-4.7(或其他已配置的模型) ``` -------------------------------- ### 配置 Cron 定时调度表达式 Source: https://docs.taskpyro.cn/professional/workflow.html 使用标准 Cron 语法配置流程的自动触发时间。 ```text # 每天凌晨 2 点执行 0 2 * * * # 每周一至周五 9 点执行 0 9 * * MON-FRI ``` -------------------------------- ### 查看日志文件内容示例 Source: https://docs.taskpyro.cn/guide/log-management.html 展示了TaskPyro生成的标准文本格式日志,包含时间戳、日志级别、模块名称及详细内容。 ```text 2025-05-23 16:45:32 [INFO] task_runner: Task 'data_collection' started 2025-05-23 16:45:33 [INFO] data_collector: Connecting to data source 2025-05-23 16:45:35 [INFO] data_collector: Successfully retrieved 256 records 2025-05-23 16:45:36 [WARNING] data_processor: Found 3 records with missing values 2025-05-23 16:45:38 [INFO] data_processor: Data processing completed 2025-05-23 16:45:39 [INFO] task_runner: Task 'data_collection' completed successfully ``` -------------------------------- ### Secure File Uploader Implementation Source: https://docs.taskpyro.cn/professional/persistent-files.html A class for validating file extensions, sizes, and MIME types before saving files to a persistent directory. ```python import os import magic class SecureFileUploader: ALLOWED_EXTENSIONS = {'.txt', '.csv', '.json', '.py', '.js'} MAX_FILE_SIZE = 100 * 1024 * 1024 # 100MB def __init__(self): self.upload_dir = Path('/app/../static/persistentMappedAddress/uploads') self.upload_dir.mkdir(parents=True, exist_ok=True) def validate_file(self, file_path): """验证文件安全性""" # 检查文件扩展名 ext = Path(file_path).suffix.lower() if ext not in self.ALLOWED_EXTENSIONS: raise ValueError(f'不允许的文件类型:{ext}') # 检查文件大小 file_size = os.path.getsize(file_path) if file_size > self.MAX_FILE_SIZE: raise ValueError(f'文件超过大小限制:{file_size} bytes') # 检查文件类型(MIME type) mime = magic.Magic(mime=True) file_type = mime.from_file(file_path) # 可以添加更多安全检查... return True def upload(self, file_path): """安全上传文件""" self.validate_file(file_path) filename = Path(file_path).name dest_path = self.upload_dir / filename shutil.copy2(file_path, dest_path) return str(dest_path) ``` -------------------------------- ### 手动安装依赖包 Source: https://docs.taskpyro.cn/professional/virtual.html 在激活的虚拟环境中手动安装所需的Python包。 ```bash pip install ``` -------------------------------- ### Implement Persistent Logging Source: https://docs.taskpyro.cn/professional/persistent-files.html Configures a rotating file handler to ensure logs are persisted and managed within the designated storage path. ```python import logging from pathlib import Path from logging.handlers import RotatingFileHandler class PersistentLogger: def __init__(self, log_name, project='default'): self.log_dir = Path('/app/../static/persistentMappedAddress/logs') / project self.log_dir.mkdir(parents=True, exist_ok=True) self.logger = logging.getLogger(log_name) self.logger.setLevel(logging.INFO) # 创建轮转文件处理器 log_file = self.log_dir / f'{log_name}.log' handler = RotatingFileHandler( log_file, maxBytes=10*1024*1024, # 10MB backupCount=5, encoding='utf-8' ) # 设置日志格式 formatter = logging.Formatter( '%(asctime)s - %(name)s - %(levelname)s - %(message)s' ) handler.setFormatter(formatter) # 添加处理器 self.logger.addHandler(handler) def info(self, message): self.logger.info(message) def error(self, message): self.logger.error(message) def warning(self, message): self.logger.warning(message) ``` -------------------------------- ### 钉钉机器人配置信息 Source: https://docs.taskpyro.cn/professional/ai-robot.html 在 TaskPyro 系统中配置钉钉机器人所需的凭证信息。 ```text AppKey: dingxxxxxxxxxxxxx AppSecret: xxxxxxxxxxxxxxxxxxxxxx 对话模型:glm-4.7 ``` -------------------------------- ### 飞书机器人配置信息 Source: https://docs.taskpyro.cn/professional/ai-robot.html 在 TaskPyro 系统中配置飞书机器人所需的凭证信息。 ```text App ID: cli_xxxxxxxxxxxxx App Secret: xxxxxxxxxxxxxxxxxxxxxx 对话模型:glm-4.7 ``` -------------------------------- ### Share and Collaborate on Files Source: https://docs.taskpyro.cn/professional/persistent-files.html Utilities for copying files to a shared directory and listing available shared content. ```python from pathlib import Path import shutil class FileSharer: def __init__(self): self.share_dir = Path('/app/../static/persistentMappedAddress/shared') self.share_dir.mkdir(parents=True, exist_ok=True) def create_project_share(self, project_name, files): """为项目创建共享文件夹""" project_dir = self.share_dir / project_name project_dir.mkdir(exist_ok=True) # 复制文件到共享目录 for src_file in files: dst_file = project_dir / Path(src_file).name shutil.copy2(src_file, dst_file) return str(project_dir) def get_share_link(self, project_name): """获取共享链接(路径)""" share_path = self.share_dir / project_name if not share_path.exists(): return None return f'/app/../static/persistentMappedAddress/shared/{project_name}' def list_shared_files(self, project_name): """列出共享文件""" project_dir = self.share_dir / project_name if not project_dir.exists(): return [] files = [] for file_path in project_dir.rglob('*'): if file_path.is_file(): files.append({ 'name': file_path.name, 'path': str(file_path), 'size': file_path.stat().st_size, 'modified': file_path.stat().st_mtime }) return files ``` -------------------------------- ### Save Spider Data to Persistent Storage Source: https://docs.taskpyro.cn/professional/persistent-files.html Demonstrates how to save scraped images and CSV data to a persistent directory using the pathlib module. ```python import requests from pathlib import Path class Spider: def __init__(self): # 持久化存储路径 self.save_dir = Path('/app/../static/persistentMappedAddress/spider_data') self.save_dir.mkdir(parents=True, exist_ok=True) def save_images(self, image_urls, project_name): """保存图片到持久化存储""" project_dir = self.save_dir / project_name project_dir.mkdir(exist_ok=True) for i, url in enumerate(image_urls): response = requests.get(url) if response.status_code == 200: file_path = project_dir / f'image_{i}.jpg' with open(file_path, 'wb') as f: f.write(response.content) print(f'保存图片:{file_path}') def save_to_csv(self, data, filename): """保存数据到 CSV 文件""" import csv file_path = self.save_dir / f'{filename}.csv' with open(file_path, 'w', newline='', encoding='utf-8') as f: writer = csv.writer(f) writer.writerows(data) return str(file_path) ``` -------------------------------- ### 时间预测指令 Source: https://docs.taskpyro.cn/professional/ai-robot.html 用于查询系统空闲时间及任务执行建议的指令。 ```text @TaskPyro-AI 助手 今天下午 3 点系统空闲吗? @TaskPyro-AI 助手 预测明天的空闲时间窗口 @TaskPyro-AI 助手 什么时候适合执行长时间任务? ``` -------------------------------- ### CryptoJS 加密解密实现 Source: https://docs.taskpyro.cn/guide/codesample.html 使用 CryptoJS 库实现的 AES 加密与解密函数,需在 Node.js 环境下运行。 ```javascript // decrypt-v.js const CryptoJS = require('crypto-js'); function encryptMessage(message, secretKey) { return CryptoJS.AES.encrypt(message, secretKey).toString(); } function decryptMessage(encryptedMessage, secretKey) { const bytes = CryptoJS.AES.decrypt(encryptedMessage, secretKey); return bytes.toString(CryptoJS.enc.Utf8); } ``` -------------------------------- ### 系统状态查询指令 Source: https://docs.taskpyro.cn/professional/ai-robot.html 用于获取系统节点数、资源使用情况及负载信息的指令。 ```text @TaskPyro-AI 助手 当前系统有多少个节点? @TaskPyro-AI 助手 查看 CPU 和内存使用情况 @TaskPyro-AI 助手 系统负载情况如何? ``` -------------------------------- ### DrissionPage 自动化配置与运行 Source: https://docs.taskpyro.cn/guide/codesample.html 配置 Chromium 无头模式并访问网页的自动化脚本。确保在运行前已安装 DrissionPage 库。 ```python from DrissionPage import ChromiumOptions, ChromiumPage try: co = ChromiumOptions().auto_port() co.set_argument('--no-sandbox') co.set_argument('--headless=new') co.set_argument('--single-process') # 单进程模式 co.set_argument('--disable-gpu') # 禁用GPU加速 page = ChromiumPage(co) page.get('about:blank') page.get('http://www.bilibili.com/') title = page.title print(title) page.close() page.quit() finally: if 'page' in locals(): page.quit() ``` -------------------------------- ### 项目部署指令示例 Source: https://docs.taskpyro.cn/professional/ai-assistant.html 用于在 AI 助手界面执行项目部署和依赖管理的自然语言指令。 ```text - 部署一个 Python 爬虫项目 - 帮我安装 requests 库 - 配置项目的 Python 环境 - 查看项目依赖包 ``` -------------------------------- ### Scrapy 项目目录结构 Source: https://docs.taskpyro.cn/guide/codesample.html 展示了 Scrapy 框架的标准项目文件布局,包含配置文件、数据模型、中间件、管道及爬虫逻辑存放位置。 ```text quotes_spider/ ├── scrapy.cfg # 项目配置文件 └── quotes_spider/ ├── __init__.py ├── items.py # 项目数据模型 ├── middlewares.py # 项目中间件 ├── pipelines.py # 数据处理管道 ├── settings.py # 项目设置 └── spiders/ # 爬虫目录 ├── __init__.py └── quotes.py # 爬虫文件 ``` -------------------------------- ### 持久化文件路径格式 Source: https://docs.taskpyro.cn/professional/persistent-files.html 展示了在代码中访问持久化文件时使用的标准路径格式。 ```text /app/../static/persistentMappedAddress/test /app/../static/persistentMappedAddress/test/1.txt ``` -------------------------------- ### 添加节点配置信息 Source: https://docs.taskpyro.cn/professional/node.html 在Web界面添加节点时填写的配置参数示例。 ```text 节点IP:172.168.1.100 节点端口:8001 节点名称:Windows节点-1 节点描述:用于执行Windows相关任务 ``` -------------------------------- ### 企业微信机器人测试指令 Source: https://docs.taskpyro.cn/professional/ai-robot.html 在企业微信群聊中发送测试消息以验证配置。 ```text @TaskPyro-AI 助手 你好 ``` -------------------------------- ### 访问系统 Source: https://docs.taskpyro.cn/guide/install.html 服务启动后,通过浏览器访问系统。 ```text http://:8080 ``` -------------------------------- ### 建议的文件夹结构示例 Source: https://docs.taskpyro.cn/professional/persistent-files.html 展示了推荐的持久化存储目录组织方式,按项目、数据集、备份和日志进行分类。 ```text 建议的文件夹结构: ├── projects/ # 项目文件 │ ├── project-a/ │ └── project-b/ ├── datasets/ # 数据集 │ ├── training/ │ └── testing/ ├── backups/ # 备份文件 │ ├── database/ │ └── configs/ └── logs/ # 日志文件 ├── 2024/ └── 2025/ ``` -------------------------------- ### 环境配置指令示例 Source: https://docs.taskpyro.cn/professional/ai-assistant.html 用于在 AI 助手界面进行环境配置和包管理的自然语言指令。 ```text - 创建一个新的虚拟环境 - 安装指定版本的 Python - 配置环境变量 - 查看已安装的包列表 ``` -------------------------------- ### Scrapy 爬虫核心代码 Source: https://docs.taskpyro.cn/guide/codesample.html 定义了一个继承自 scrapy.Spider 的类,用于从目标网站提取名言、作者及标签,并支持自动翻页爬取。 ```python import scrapy class QuotesSpider(scrapy.Spider): # 爬虫的名称,必须唯一 name = "quotes" # 起始 URL 列表,爬虫将从这些 URL 开始爬取 start_urls = [ 'https://quotes.toscrape.com', ] def parse(self, response): # 遍历每个名言元素 for quote in response.css('div.quote'): # 提取名言文本 text = quote.css('span.text::text').get() # 提取作者姓名 author = quote.css('small.author::text').get() # 提取标签列表 tags = quote.css('div.tags a.tag::text').getall() # 生成包含提取信息的字典,并通过 yield 返回 yield { 'text': text, 'author': author, 'tags': tags } # 查找下一页的链接 next_page = response.css('li.next a::attr(href)').get() if next_page is not None: # 如果存在下一页链接,使用 response.follow 方法继续爬取下一页,并调用 parse 方法处理响应 yield response.follow(next_page, self.parse) ``` -------------------------------- ### 钉钉机器人对话示例 Source: https://docs.taskpyro.cn/professional/ai-robot.html 在钉钉群聊中与 AI 助手进行交互的典型指令。 ```text @TaskPyro-AI 助手 你能为我做什么 ``` -------------------------------- ### 飞书机器人对话示例 Source: https://docs.taskpyro.cn/professional/ai-robot.html 在飞书群聊中与 AI 助手进行交互的典型指令。 ```text @TaskPyro-AI 助手 你能为我做什么? ``` -------------------------------- ### 任务管理指令示例 Source: https://docs.taskpyro.cn/professional/ai-assistant.html 用于在 AI 助手界面执行任务相关操作的自然语言指令。 ```text - 创建一个新的定时任务 - 查询当前所有运行中的任务 - 帮我停止任务 XXX - 查看任务执行历史 ``` -------------------------------- ### 企业微信机器人对话示例 Source: https://docs.taskpyro.cn/professional/ai-robot.html 在企业微信群聊中与 AI 助手进行交互的典型指令。 ```text @TaskPyro-AI 助手 你不能为我做什么 ``` -------------------------------- ### 钉钉机器人测试指令 Source: https://docs.taskpyro.cn/professional/ai-robot.html 在钉钉群聊中发送指令以测试机器人功能。 ```text @TaskPyro-AI 助手 查看当前任务状态 ``` -------------------------------- ### 飞书机器人测试指令 Source: https://docs.taskpyro.cn/professional/ai-robot.html 在飞书群聊中发送指令以测试机器人功能。 ```text @TaskPyro-AI 助手 今天有哪些任务失败了? ``` -------------------------------- ### 问题解答指令示例 Source: https://docs.taskpyro.cn/professional/ai-assistant.html 用于在 AI 助手界面获取技术支持和优化建议的自然语言指令。 ```text - 任务执行失败的原因是什么? - 如何优化任务调度策略? - 系统支持哪些爬虫框架? - 如何配置分布式节点? ``` -------------------------------- ### 任务管理指令 Source: https://docs.taskpyro.cn/professional/ai-robot.html 用于查询任务状态、执行历史及统计信息的指令。 ```text @TaskPyro-AI 助手 今天有哪些任务失败了? @TaskPyro-AI 助手 查看所有运行中的任务 @TaskPyro-AI 助手 查看任务 XXX 的执行历史 @TaskPyro-AI 助手 统计上周任务的平均执行时长 ``` -------------------------------- ### 系统查询指令示例 Source: https://docs.taskpyro.cn/professional/ai-assistant.html 用于在 AI 助手界面查询系统状态和资源使用情况的自然语言指令。 ```text - 当前系统有多少个节点? - 查看 CPU 和内存使用情况 - 有哪些空闲时间段可以升级系统? - 查询某个项目的定时任务情况 ``` -------------------------------- ### 帮助查询指令 Source: https://docs.taskpyro.cn/professional/ai-robot.html 用于获取机器人功能说明及使用方法的指令。 ```text @TaskPyro-AI 助手 你能为我做什么? @TaskPyro-AI 助手 你不能为我做什么? @TaskPyro-AI 助手 如何使用任务调度功能? ``` -------------------------------- ### Playwright 异步网页自动化 Source: https://docs.taskpyro.cn/guide/codesample.html 使用 Playwright 进行异步自动化操作,首次运行前需确保已安装 Chromium 浏览器。 ```python mport asyncio from playwright.async_api import async_playwright import subprocess # 安装 Chromium,第一次在playwright环境下运行,需要先安装如下命令,否则会有异常警告,安装完之后,下次运行则不需要再次执行了 # subprocess.run(["playwright", "install", "chromium"], check=True) async def main(): async with async_playwright() as p: # 启动 Chromium 浏览器 browser = await p.chromium.launch(headless=True) # 创建一个新的浏览器上下文 context = await browser.new_context() # 在上下文中创建一个新的页面 page = await context.new_page() try: # 打开百度首页 await page.goto('http://www.bilibili.com/') # 获取搜索结果页面的标题 title = await page.title() print(f"搜索结果页面的标题是: {title}") except Exception as e: print(f"发生错误: {e}") finally: # 关闭浏览器 await browser.close() if __name__ == "__main__": asyncio.run(main()) ``` === COMPLETE CONTENT === This response contains all available snippets from this library. No additional content exists. Do not make further requests.