插件窝 干货文章 在Linux系统上使用Python进行系统脚本编程的基本配置指南

在Linux系统上使用Python进行系统脚本编程的基本配置指南

脚本 Python 系统 安装 594    来源:    2025-04-17

Linux系统上Python系统脚本编程配置指南

1. 基础环境配置

1.1 安装Python

# 检查Python是否已安装
python3 --version

# 在Ubuntu/Debian上安装Python
sudo apt update
sudo apt install python3 python3-pip python3-venv

# 在CentOS/RHEL上安装Python
sudo yum install python3 python3-pip

1.2 设置虚拟环境

# 创建项目目录
mkdir my_script_project && cd my_script_project

# 创建虚拟环境
python3 -m venv venv

# 激活虚拟环境
source venv/bin/activate

# 退出虚拟环境
deactivate

2. 常用工具安装

2.1 开发工具

# 安装常用开发工具
pip install ipython black flake8 pylint mypy

# 安装调试工具
pip install pdbpp ipdb

2.2 系统脚本常用库

# 安装系统操作相关库
pip install psutil sh requests click rich

# 可选:安装更高级的CLI工具库
pip install typer fire

3. 开发环境配置

3.1 创建基础项目结构

.
├── bin/                # 可执行脚本
├── lib/                # 项目库代码
├── tests/              # 测试代码
├── docs/               # 文档
├── requirements.txt    # 依赖列表
└── setup.py            # 安装配置

3.2 创建requirements.txt

# 生成当前环境依赖
pip freeze > requirements.txt

# 从requirements.txt安装依赖
pip install -r requirements.txt

4. 系统脚本编写要点

4.1 基础脚本模板

#!/usr/bin/env python3
"""
系统脚本基础模板
"""

import os
import sys
import argparse
import logging
from typing import List, Optional

# 配置日志
logging.basicConfig(
    level=logging.INFO,
    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
)
logger = logging.getLogger(__name__)

def main(args: Optional[List[str]] = None) -> int:
    """主函数"""
    if args is None:
        args = sys.argv[1:]

    # 解析参数
    parser = argparse.ArgumentParser(description='系统脚本描述')
    parser.add_argument('-v', '--verbose', action='store_true', help='详细输出')
    # 添加更多参数...

    parsed_args = parser.parse_args(args)

    if parsed_args.verbose:
        logger.setLevel(logging.DEBUG)

    try:
        # 主逻辑
        logger.info("脚本开始执行")

        # TODO: 实现脚本功能

        logger.info("脚本执行成功")
        return 0
    except Exception as e:
        logger.error(f"脚本执行失败: {str(e)}", exc_info=True)
        return 1

if __name__ == '__main__':
    sys.exit(main())

4.2 常用系统操作示例

import os
import subprocess
import shutil
import psutil

# 执行系统命令
def run_command(cmd: str) -> str:
    """执行系统命令并返回输出"""
    try:
        result = subprocess.run(
            cmd, 
            shell=True, 
            check=True, 
            stdout=subprocess.PIPE, 
            stderr=subprocess.PIPE,
            text=True
        )
        return result.stdout
    except subprocess.CalledProcessError as e:
        print(f"命令执行失败: {e.stderr}")
        raise

# 文件操作
def backup_file(src: str, dst: str) -> None:
    """备份文件"""
    if not os.path.exists(src):
        raise FileNotFoundError(f"源文件不存在: {src}")
    shutil.copy2(src, dst)

# 系统监控
def check_system_health() -> dict:
    """检查系统健康状况"""
    return {
        'cpu_usage': psutil.cpu_percent(interval=1),
        'memory_usage': psutil.virtual_memory().percent,
        'disk_usage': psutil.disk_usage('/').percent,
        'load_avg': os.getloadavg()
    }

5. 脚本部署与执行

5.1 使脚本可执行

# 添加执行权限
chmod +x your_script.py

# 可以直接执行
./your_script.py

5.2 系统级安装

# setup.py示例
from setuptools import setup

setup(
    name='my_system_scripts',
    version='0.1',
    scripts=['bin/script1', 'bin/script2'],
    install_requires=[
        'psutil>=5.0',
        'click>=7.0',
    ],
)

安装到系统:

pip install --user .

6. 高级配置

6.1 日志轮转配置

import logging
from logging.handlers import RotatingFileHandler

def setup_logging(log_file: str = '/var/log/my_script.log'):
    handler = RotatingFileHandler(
        log_file,
        maxBytes=1024*1024,  # 1MB
        backupCount=5
    )
    formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
    handler.setFormatter(formatter)

    logger = logging.getLogger()
    logger.setLevel(logging.INFO)
    logger.addHandler(handler)

6.2 使用systemd管理脚本

创建服务文件 /etc/systemd/system/my_script.service:

[Unit]
Description=My Python System Script
After=network.target

[Service]
User=root
WorkingDirectory=/path/to/script
ExecStart=/path/to/venv/bin/python /path/to/script.py
Restart=always
Environment=PYTHONUNBUFFERED=1

[Install]
WantedBy=multi-user.target

然后启用服务:

sudo systemctl daemon-reload
sudo systemctl enable my_script
sudo systemctl start my_script

7. 安全最佳实践

  1. 避免使用root权限运行脚本,除非必要
  2. 敏感信息使用环境变量或配置文件,不要硬编码
  3. 使用os.umask设置适当的文件权限
  4. 验证所有用户输入
  5. 使用subprocess时避免shell=True,防止命令注入
# 安全示例
def safe_file_operation(filename: str) -> None:
    """安全文件操作示例"""
    if not os.path.exists(filename):
        raise FileNotFoundError(f"文件不存在: {filename}")

    if not os.path.isfile(filename):
        raise ValueError(f"不是常规文件: {filename}")

    # 设置安全权限
    os.umask(0o077)

    # 安全地处理文件
    with open(filename, 'r') as f:
        content = f.read()

    # 处理内容...

通过以上配置,您可以在Linux系统上高效地开发和运行Python系统脚本。