【Python百宝箱】极客之选:掌握Python内外库的进程管理技巧

Python系统编程大揭秘:掌握操作系统接口、进程管理与系统信息

前言

在当今软件开发领域,系统编程是一项至关重要的技能,尤其是在涉及到操作系统接口、进程管理以及系统信息的处理时。Python作为一门强大而灵活的编程语言,提供了丰富的工具和库,使得系统编程变得更加简便和高效。本文将深入探讨Python中的操作系统接口和系统信息处理,帮助读者更好地利用这些功能进行系统级开发。

【Python百宝箱】从新手到大师:Python 系统与文件操作全攻略

欢迎订阅专栏:Python库百宝箱:解锁编程的神奇世界

文章目录

  • Python系统编程大揭秘:掌握操作系统接口、进程管理与系统信息
    • 前言
    • 1. Python内置模块: `os`
      • 1.1 基本功能
      • 1.2 文件和目录操作
      • 1.3 进程控制
      • 1.4 路径操作
      • 1.5 环境变量操作
      • 1.6 文件权限操作
      • 1.7 文件和目录遍历
    • 2. 外部库: `psutil`
      • 2.1 获取系统利用率
      • 2.2 进程数据接口
        • 2.2.1 进程信息查询
        • 2.2.2 进程控制操作
      • 2.3 网络信息获取
        • 2.3.1 获取网络连接信息
        • 2.3.2 获取网络地址信息
      • 2.4 磁盘信息查询
        • 2.4.1 获取磁盘分区信息
        • 2.4.2 获取磁盘使用情况
      • 2.5 传感器信息获取
        • 2.5.1 获取温度信息
        • 2.5.2 获取电池状态
    • 3. 文件和目录操作: `shutil`
      • 3.1 文件操作
      • 3.2 目录操作
      • 3.3 文件压缩与解压缩
      • 3.4 文件比较和更新
        • 3.4.1 文件比较
        • 3.4.2 文件更新
      • 3.5 文件权限和所有权
        • 3.5.1 获取文件权限
        • 3.5.2 设置文件权限
      • 3.6 路径操作
    • 4. 系统环境变量: `dotenv`
      • 4.1 安全管理敏感信息
      • 4.2 灵活配置应用程序
      • 4.3 加密环境变量
        • 4.3.1 创建加密环境变量文件
        • 4.3.2 解密环境变量
      • 4.4 多环境配置
        • 4.4.1 创建不同环境的配置文件
        • 4.4.2 加载特定环境的配置
      • 4.5 环境变量验证
        • 4.5.1 配置验证
    • 5. 进程管理: `subprocess`
      • 5.1 执行外部命令
      • 5.2 控制子进程
      • 5.3 获取命令输出
      • 5.4 交互式命令执行
        • 5.4.1 与外部命令进行交互
        • 5.4.2 在交互式shell中执行命令
      • 5.5 超时和异常处理
        • 5.5.1 设置命令超时时间
        • 5.5.2 处理异常
    • 6. 并行编程: `multiprocessing`
      • 6.1 多进程并行
      • 6.2 进程间通信
      • 6.3 进程池
      • 6.4 进程间共享数据
        • 6.4.1 使用`Value`共享单一变量
        • 6.4.2 使用`Array`共享数组
      • 6.5 进程同步与锁
    • 7. 日志记录: `logging`
      • 7.1 基本概念
      • 7.2 配置日志
      • 7.3 自定义日志处理器
      • 7.4 日志轮转
      • 7.5 日志过滤器
      • 7.6 多模块日志记录
    • 8. 系统信息获取: `platform`
      • 8.1 硬件信息
      • 8.2 操作系统信息
      • 8.3 Python解释器信息
      • 8.4 平台信息
      • 8.5 处理器信息
      • 8.6 运行时信息
    • 总结

1. Python内置模块: os

1.1 基本功能

Python的os模块是一个提供与操作系统交互的强大工具。它包含了许多用于文件和目录管理、进程控制等的函数。以下是一些基本功能的示例:

import os# 获取当前工作目录
current_dir = os.getcwd()
print(f"当前工作目录: {current_dir}")# 列出指定目录下的文件和目录
dir_contents = os.listdir(current_dir)
print(f"目录内容: {dir_contents}")

1.2 文件和目录操作

os模块提供了丰富的文件和目录操作功能,如创建目录、删除文件等:

# 创建目录
new_dir = os.path.join(current_dir, "new_directory")
os.mkdir(new_dir)
print(f"已创建目录: {new_dir}")# 删除目录
os.rmdir(new_dir)
print(f"已删除目录: {new_dir}")

1.3 进程控制

通过os模块,可以实现对进程的基本控制,如获取进程ID、执行系统命令等:

# 获取当前进程ID
process_id = os.getpid()
print(f"当前进程ID: {process_id}")# 执行系统命令
os.system("echo Hello, OS Module!")

1.4 路径操作

os.path模块提供了关于路径操作的函数,用于处理文件路径和目录路径的字符串。这对于在不同操作系统上正确构建路径非常有用。

import os# 拼接路径
path = os.path.join("folder", "subfolder", "file.txt")
print(f"拼接后的路径: {path}")# 获取路径的目录部分
directory = os.path.dirname(path)
print(f"路径的目录部分: {directory}")# 获取路径的文件名部分
filename = os.path.basename(path)
print(f"路径的文件名部分: {filename}")

1.5 环境变量操作

os.environ允许您访问系统的环境变量,可以读取和设置环境变量的值。

import os# 读取环境变量
home_directory = os.environ.get('HOME')
print(f"Home目录: {home_directory}")# 设置环境变量
os.environ['MY_VARIABLE'] = 'my_value'
print(f"设置的环境变量值: {os.environ['MY_VARIABLE']}")

1.6 文件权限操作

os模块还提供了一些函数来检查和更改文件的权限。

import os# 检查文件是否可读
is_readable = os.access("file.txt", os.R_OK)
print(f"文件是否可读: {is_readable}")# 修改文件权限
os.chmod("file.txt", 0o755)  # 设置为-rwxr-xr-x
print("文件权限已修改")

1.7 文件和目录遍历

os.walk函数可以用于遍历指定目录及其子目录下的所有文件和文件夹。

import os# 遍历目录
for root, dirs, files in os.walk("parent_folder"):print(f"当前目录: {root}")print(f"子目录: {dirs}")print(f"文件: {files}")

这些附加的os模块功能为系统编程提供了更多灵活性和便利性,能够处理更多关于路径、环境变量和权限的操作。

2. 外部库: psutil

2.1 获取系统利用率

psutil库允许我们获取系统的利用率信息,包括CPU、内存、磁盘等:

import psutil# 获取CPU利用率
cpu_percent = psutil.cpu_percent()
print(f"当前CPU利用率: {cpu_percent}%")# 获取内存利用率
memory_percent = psutil.virtual_memory().percent
print(f"当前内存利用率: {memory_percent}%")

2.2 进程数据接口

psutil提供了方便的接口来获取和管理进程信息:

2.2.1 进程信息查询
# 获取所有进程信息
all_processes = psutil.process_iter(attrs=['pid', 'name', 'cpu_percent'])
for process in all_processes:print(f"进程ID: {process.info['pid']}, 进程名: {process.info['name']}, CPU利用率: {process.info['cpu_percent']}%")
2.2.2 进程控制操作
# 通过进程ID结束进程
target_process_id = 1234  # 替换为实际进程ID
target_process = psutil.Process(target_process_id)
target_process.terminate()
print(f"已结束进程ID为 {target_process_id} 的进程")

2.3 网络信息获取

psutil不仅提供了对系统资源的监控,还能够获取网络相关的信息,包括网络连接和网络地址。

2.3.1 获取网络连接信息
import psutil# 获取网络连接信息
connections = psutil.net_connections()
for conn in connections:print(f"本地地址: {conn.laddr}, 远程地址: {conn.raddr}, 状态: {conn.status}")
2.3.2 获取网络地址信息
# 获取网络地址信息
network_interfaces = psutil.net_if_addrs()
for interface, addresses in network_interfaces.items():print(f"接口: {interface}")for address in addresses:print(f"  地址族: {address.family}, 地址: {address.address}, 状态: {address.netmask}")

2.4 磁盘信息查询

psutil还能够获取关于磁盘的详细信息,包括磁盘分区、磁盘使用情况等。

2.4.1 获取磁盘分区信息
# 获取磁盘分区信息
disk_partitions = psutil.disk_partitions()
for partition in disk_partitions:print(f"设备: {partition.device}, 挂载点: {partition.mountpoint}, 文件系统: {partition.fstype}")
2.4.2 获取磁盘使用情况
# 获取磁盘使用情况
disk_usage = psutil.disk_usage("/")
print(f"总空间: {disk_usage.total}, 已用空间: {disk_usage.used}, 可用空间: {disk_usage.free}")

2.5 传感器信息获取

对于支持的系统,psutil还可以获取传感器信息,如温度、电池状态等。

2.5.1 获取温度信息
# 获取温度信息(仅限支持的系统)
temperature_info = psutil.sensors_temperatures()
for sensor, readings in temperature_info.items():print(f"传感器: {sensor}")for entry in readings:print(f"  类型: {entry.label}, 温度: {entry.current}°C")
2.5.2 获取电池状态
# 获取电池状态信息(仅限支持的系统)
battery_info = psutil.sensors_battery()
if battery_info:print(f"电池状态: {battery_info.percent}% 电量, {battery_info.power_plugged} 充电中")
else:print("未检测到电池信息")

这些psutil库的功能扩展使得系统监控和管理变得更加全面和深入。在实际应用中,这些信息对于系统性能优化、故障排查等方面都具有重要作用。

3. 文件和目录操作: shutil

3.1 文件操作

shutil库是Python的文件操作工具,提供了许多高级的文件和目录管理功能:

import shutil# 复制文件
source_file = "source.txt"
destination = "destination_folder"
shutil.copy(source_file, destination)
print(f"已复制文件 {source_file}{destination}")# 移动文件
shutil.move(source_file, "new_location")
print(f"已将文件 {source_file} 移动到新位置")

3.2 目录操作

# 复制整个目录
shutil.copytree("source_folder", "destination_folder_copy")
print("已复制整个目录")# 删除目录及其内容
shutil.rmtree("directory_to_delete")
print("已删除目录及其内容")

3.3 文件压缩与解压缩

# 压缩文件
shutil.make_archive("archive", "zip", "folder_to_compress")
print("已压缩文件夹")# 解压缩文件
shutil.unpack_archive("archive.zip", "extracted_folder")
print("已解压缩文件")

3.4 文件比较和更新

shutil还提供了一些用于比较和更新文件的功能,对于需要检查文件变更或者同步文件的场景很有用。

3.4.1 文件比较
import shutil# 比较两个文件
file1 = "file1.txt"
file2 = "file2.txt"
is_equal = shutil.cmp(file1, file2)
print(f"文件 {file1}{file2} 是否相同: {is_equal}")
3.4.2 文件更新
# 将源文件夹中的文件更新到目标文件夹
source_folder = "source_folder"
destination_folder = "destination_folder"
shutil.copytree(source_folder, destination_folder, update=True)
print(f"已将 {source_folder} 中的更新复制到 {destination_folder}")

3.5 文件权限和所有权

shutil提供了函数来获取和设置文件的权限和所有权信息。

3.5.1 获取文件权限
import shutil# 获取文件权限
file_permissions = shutil.get_file_security("file.txt")
print(f"文件权限信息: {file_permissions}")
3.5.2 设置文件权限
# 设置文件权限
shutil.set_file_security("file.txt", "NEW_PERMISSIONS")
print("文件权限已修改")

3.6 路径操作

os.path类似,shutil也提供了一些对路径进行操作的函数。

import shutil# 检查路径是否为绝对路径
is_absolute = shutil.os.path.isabs("/absolute/path")
print(f"路径是否为绝对路径: {is_absolute}")# 获取路径的实际路径(解析符号链接)
real_path = shutil.os.path.realpath("/path/to/symlink")
print(f"实际路径: {real_path}")

这些shutil库的功能拓展使得文件和目录的操作更加灵活和全面。从复制、移动、压缩到比较、更新,shutil提供了丰富的工具,适用于各种文件和目录处理的场景。

4. 系统环境变量: dotenv

4.1 安全管理敏感信息

dotenv库用于加载环境变量,特别是在处理敏感信息时,可以使用.env文件来管理这些变量:

from dotenv import load_dotenv# 从.env文件加载环境变量
load_dotenv()# 使用环境变量
api_key = os.getenv("API_KEY")
print(f"使用API密钥: {api_key}")

4.2 灵活配置应用程序

# 设定默认值
debug_mode = os.getenv("DEBUG_MODE", default="False")
print(f"调试模式: {debug_mode}")# 设置环境变量
os.environ["LOG_LEVEL"] = "DEBUG"
print(f"已设置日志级别: {os.getenv('LOG_LEVEL')}")

4.3 加密环境变量

dotenv还支持使用加密的方式存储敏感的环境变量,保护这些信息免受未经授权的访问。

4.3.1 创建加密环境变量文件
from dotenv import encrypt_value# 加密敏感信息
encrypted_api_key = encrypt_value("my_secret_api_key")
with open(".env.enc", "w") as encrypted_file:encrypted_file.write(f"ENCRYPTED_API_KEY={encrypted_api_key}")
4.3.2 解密环境变量
from dotenv import load_dotenv, decrypt_value# 从加密文件加载环境变量
load_dotenv(".env.enc")# 解密环境变量
decrypted_api_key = decrypt_value(os.getenv("ENCRYPTED_API_KEY"))
print(f"解密后的API密钥: {decrypted_api_key}")

4.4 多环境配置

dotenv支持加载不同环境的配置,通过设置.env文件中的环境名来实现。

4.4.1 创建不同环境的配置文件

.env.development

DEBUG=True
API_KEY=dev_key

.env.production

DEBUG=False
API_KEY=prod_key
4.4.2 加载特定环境的配置
from dotenv import find_dotenv, load_dotenv# 查找并加载环境变量文件
load_dotenv(find_dotenv(".env.production"))# 使用加载的环境变量
debug_mode = os.getenv("DEBUG")
api_key = os.getenv("API_KEY")
print(f"调试模式: {debug_mode}, 使用API密钥: {api_key}")

4.5 环境变量验证

dotenv支持对加载的环境变量进行验证,确保配置的完整性。

4.5.1 配置验证
from dotenv import load_dotenv, find_dotenv, dotenv_values# 查找并加载环境变量文件
load_dotenv(find_dotenv(".env.production"))# 验证环境变量是否存在
required_vars = ["DEBUG", "API_KEY"]
config = dotenv_values()
missing_vars = [var for var in required_vars if var not in config]
if missing_vars:raise EnvironmentError(f"缺少必要的环境变量: {', '.join(missing_vars)}")

这些dotenv库的功能拓展使得环境变量的管理更加安全、灵活和多样化。从简单的加载到加密、多环境配置和验证,dotenv提供了丰富的工具,适用于各种应用场景。

5. 进程管理: subprocess

5.1 执行外部命令

subprocess库允许执行外部命令并获取其输出:

import subprocess# 执行命令并获取输出
result = subprocess.run(["ls", "-l"], capture_output=True, text=True)
print(f"命令输出: {result.stdout}")

5.2 控制子进程

# 启动子进程
subprocess.Popen(["notepad.exe"])# 等待子进程结束
process = subprocess.Popen(["python", "script.py"])
process.wait()
print("子进程已结束")

5.3 获取命令输出

# 获取命令输出
output = subprocess.check_output(["echo", "Hello, subprocess!"], text=True)
print(f"命令输出: {output}")

5.4 交互式命令执行

subprocess还支持在交互式会话中执行命令,与外部进程进行交互。

5.4.1 与外部命令进行交互
import subprocess# 与外部命令进行交互
process = subprocess.Popen(["python"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, text=True)
process.stdin.write("print('Hello from subprocess!')\n")
output, _ = process.communicate()
print(f"外部命令输出: {output}")
5.4.2 在交互式shell中执行命令
# 在交互式shell中执行命令
process = subprocess.Popen(["bash"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, text=True)
process.stdin.write("echo 'Hello from subprocess!'\n")
output, _ = process.communicate()
print(f"Shell命令输出: {output}")

5.5 超时和异常处理

subprocess允许设置命令执行的超时时间,并提供异常处理机制来处理执行过程中的错误。

5.5.1 设置命令超时时间
import subprocess# 设置命令超时时间
try:result = subprocess.run(["sleep", "5"], timeout=3, capture_output=True, text=True)print(f"命令输出: {result.stdout}")
except subprocess.TimeoutExpired:print("命令执行超时")
5.5.2 处理异常
# 处理命令执行异常
try:output = subprocess.check_output(["unknown_command"], text=True)print(f"命令输出: {output}")
except subprocess.CalledProcessError as e:print(f"命令执行异常: {e}")

这些subprocess库的功能拓展使得外部命令的执行和处理更加灵活和可控。从简单的获取输出到交互式执行和异常处理,subprocess提供了丰富的工具,适用于各种外部进程管理的场景。

6. 并行编程: multiprocessing

6.1 多进程并行

multiprocessing库提供了在Python中创建和管理多个进程的功能:

import multiprocessing# 定义要并行执行的函数
def worker(number):print(f"Worker {number} 执行")# 创建进程池,启动多个进程
with multiprocessing.Pool(processes=3) as pool:pool.map(worker, range(3))

6.2 进程间通信

from multiprocessing import Process, Queue# 定义进程要执行的函数
def worker(queue):data = queue.get()print(f"接收到数据: {data}")# 创建进程间通信的队列
communication_queue = Queue()# 启动子进程
process = Process(target=worker, args=(communication_queue,))
process.start()# 向队列发送数据
communication_queue.put("Hello, multiprocessing!")# 等待子进程结束
process.join()

6.3 进程池

from multiprocessing import Pool# 定义要并行执行的函数
def worker(number):return f"Worker {number} 执行"# 创建进程池,启动多个进程
with Pool(processes=3) as pool:results = pool.map(worker, range(3))print("并行执行结果:")for result in results:print(result)

6.4 进程间共享数据

multiprocessing提供了一些用于在多个进程之间共享数据的机制,如ValueArray

6.4.1 使用Value共享单一变量
from multiprocessing import Process, Value
import time# 定义进程要执行的函数
def counter(shared_counter, sleep_time):for _ in range(5):with shared_counter.get_lock():shared_counter.value += 1time.sleep(sleep_time)# 创建共享的计数器变量
counter_value = Value('i', 0)# 启动两个进程,共享计数器变量
process1 = Process(target=counter, args=(counter_value, 0.1))
process2 = Process(target=counter, args=(counter_value, 0.2))# 启动进程
process1.start()
process2.start()# 等待两个进程结束
process1.join()
process2.join()# 打印最终计数器值
print(f"最终计数器值: {counter_value.value}")
6.4.2 使用Array共享数组
from multiprocessing import Process, Array# 定义进程要执行的函数
def update_array(shared_array, index):shared_array[index] = index * 2# 创建共享的数组
shared_numbers = Array('i', 5)# 启动五个进程,共享数组
processes = [Process(target=update_array, args=(shared_numbers, i)) for i in range(5)]# 启动进程
for process in processes:process.start()# 等待所有进程结束
for process in processes:process.join()# 打印最终共享数组的值
print(f"最终共享数组的值: {list(shared_numbers)}")

6.5 进程同步与锁

multiprocessing提供了Lock来确保在多个进程中对共享资源的安全访问。

from multiprocessing import Process, Lock# 定义进程要执行的函数
def update_counter(shared_counter, lock):for _ in range(5):with lock:shared_counter.value += 1# 创建共享的计数器和锁
counter_value = Value('i', 0)
counter_lock = Lock()# 启动两个进程,共享计数器和锁
process1 = Process(target=update_counter, args=(counter_value, counter_lock))
process2 = Process(target=update_counter, args=(counter_value, counter_lock))# 启动进程
process1.start()
process2.start()# 等待两个进程结束
process1.join()
process2.join()# 打印最终计数器值
print(f"最终计数器值: {counter_value.value}")

这些multiprocessing库的功能拓展使得并行编程更加灵活和高效。从多进程并行执行、进程间通信到进程间共享数据和同步锁,multiprocessing提供了丰富的工具,适用于各种并行编程的场景。

7. 日志记录: logging

7.1 基本概念

logging库用于在Python应用程序中添加灵活的日志记录:

import logging# 配置日志
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s')# 记录日志
logging.debug('这是一个调试消息')
logging.info('这是一条信息消息')

7.2 配置日志

# 配置日志到文件
logging.basicConfig(filename='app.log', level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')# 记录日志
logging.info('这条日志将被写入文件')

7.3 自定义日志处理器

# 创建自定义日志处理器
class MyHandler(logging.Handler):def emit(self, record):print(f"自定义处理器: {self.format(record)}")# 添加自定义处理器到日志
logging.getLogger().addHandler(MyHandler())# 记录日志
logging.warning('这条日志将由自定义处理器处理')

7.4 日志轮转

logging库支持通过RotatingFileHandler进行日志轮转,以控制日志文件的大小:

import logging
from logging.handlers import RotatingFileHandler# 创建RotatingFileHandler,最大日志文件大小为1MB,最多保留3个备份文件
handler = RotatingFileHandler('app.log', maxBytes=1e6, backupCount=3)# 配置日志格式
handler.setFormatter(logging.Formatter('%(asctime)s - %(levelname)s - %(message)s'))# 添加处理器到日志
logging.getLogger().addHandler(handler)# 记录日志
for i in range(10):logging.info(f'这是第 {i+1} 条日志')

7.5 日志过滤器

import logging# 创建日志过滤器,仅允许记录级别为INFO的消息
class InfoFilter(logging.Filter):def filter(self, record):return record.levelno == logging.INFO# 创建过滤器实例
info_filter = InfoFilter()# 创建日志处理器
handler = logging.StreamHandler()# 添加过滤器到处理器
handler.addFilter(info_filter)# 添加处理器到日志
logging.getLogger().addHandler(handler)# 记录不同级别的日志
logging.debug('这是一条调试消息')
logging.info('这是一条信息消息')
logging.warning('这是一条警告消息')

7.6 多模块日志记录

# 在模块中创建Logger实例
logger = logging.getLogger(__name__)# 配置Logger
logger.setLevel(logging.DEBUG)# 添加处理器到Logger
logger.addHandler(logging.StreamHandler())# 记录日志
logger.info('这是来自模块的信息消息')

这些logging库的功能拓展使得日志记录更加灵活和强大。从基本概念、配置日志到自定义处理器、日志轮转和过滤器,logging提供了丰富的工具,适用于各种日志记录的场景。

8. 系统信息获取: platform

8.1 硬件信息

import platform# 获取计算机硬件信息
hardware_info = platform.uname()
print(f"硬件信息: {hardware_info}")

8.2 操作系统信息

# 获取操作系统信息
os_info = platform.system()
print(f"操作系统: {os_info}")# 获取操作系统版本
os_version = platform.version()
print(f"操作系统版本: {os_version}")

8.3 Python解释器信息

# 获取Python解释器信息
python_info = platform.python_version()
print(f"Python解释器版本: {python_info}")

8.4 平台信息

# 获取平台信息
platform_info = platform.platform()
print(f"平台信息: {platform_info}")# 获取计算机的网络名称
network_name = platform.node()
print(f"计算机网络名称: {network_name}")

8.5 处理器信息

# 获取处理器信息
processor_info = platform.processor()
print(f"处理器信息: {processor_info}")# 获取计算机的架构
architecture = platform.architecture()
print(f"计算机架构: {architecture}")

8.6 运行时信息

# 获取运行时信息
runtime_info = platform.python_compiler()
print(f"Python编译器信息: {runtime_info}")# 获取计算机的时区
timezone_info = platform.timezone()
print(f"计算机时区: {timezone_info}")

这些platform库的功能拓展使得获取系统信息更加全面和方便。从硬件信息、操作系统信息到Python解释器信息和平台信息,platform提供了丰富的工具,适用于各种系统信息获取的场景。

总结

通过学习本文,读者将全面掌握Python中处理系统编程任务所需的关键知识。从基本的操作系统接口到高级的系统信息获取,我们深入剖析了多个库的用法,使读者能够更加自信和高效地应对各种系统级编程挑战。无论是新手还是有经验的开发者,都将在本文中找到实用的技巧和方法,提升其系统编程能力。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/205458.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

马克思主义原理期末复习大题

导论: 1.什么是马克思主义?马克思主义具有哪些基本特征? 马克思主义是由马克思和恩格斯创立并为后继者所不断发展的科学理论体系,是关于自然,社会和人类思维发展一般规律的学说,是关于社会主义必然代替资本主义,最终实现共产主义的学说,是关于无产阶级解放,全人类解…

Vue 静态渲染 v-pre

v-pre 指令&#xff1a;用于阻止 Vue 解析这个标签&#xff0c;直接渲染到页面中。 语法格式&#xff1a; <div v-pre> {{ 数据 }} </div> 基础使用&#xff1a; <template><h3>静态渲染 v-pre</h3><p v-pre>静态渲染&#xff1a;{{ n…

C++刷题 -- 链表

C刷题 – 链表 文章目录 C刷题 -- 链表1.删除链表的倒数第 N 个结点2.链表相交3.环形链表 1.删除链表的倒数第 N 个结点 https://leetcode.cn/problems/remove-nth-node-from-end-of-list/ 快慢指针的应用 fast指针先移动N步&#xff0c;slow依然指向head&#xff1b;然后fa…

短视频文案生成器有哪些?【2024新版短视频文案生成器】

在当今数字化社交时代&#xff0c;短视频已经成为人们生活中不可或缺的一部分。然而&#xff0c;想要制作引人注目、独具创意的短视频&#xff0c;光有精彩的画面和音效可能不够&#xff0c;一个吸引眼球的短视频文案也是至关重要的。本文将专心分享短视频文案生成器的种类&…

OpenTiny Vue 3.12.0 发布:文档大优化!增加水印和二维码两个新组件

你好&#xff0c;我是 Kagol。 非常高兴跟大家宣布&#xff0c;2023年11月30日&#xff0c;OpenTiny Vue 发布了 v3.12.0 &#x1f389;。 OpenTiny 每次大版本发布&#xff0c;都会给大家带来一些实用的新特性&#xff0c;10.24 我们发布了 v3.11.0 版本&#xff0c;增加了富…

做题笔记:SQL Sever 方式做牛客SQL的题目--VQ29

----VQ29 验证刷题效果&#xff0c;输出题目真实通过率 牛客刷题记录表done_questions_record&#xff0c;为验证重复刷题率&#xff0c;需要我们查找一些数据&#xff1a; question_pass_rate 表示每个用户不同题目的通过率&#xff08;同一用户同一题重复提交通过仅计算一次&…

第3讲、Hyper-V 在Windows Server 2012 R2新增特性:

1、新的VHDX&#xff08;Virtual Hard Disk X&#xff09;格式 1&#xff09;打破VHD最大存储能力2TB的限制&#xff0c;VHDX最大可使用64TB虚拟磁盘空间 2&#xff09;VHD扇区大小被限制为512Byte&#xff0c;但VHDX已经改变为支持更加优秀的4KByte 3…

CFLAGS、CXXFLAGS、FFLAGS、FCFLAGS、LDFLAGS、LD_LIBRARY_PATH区别

这些环境变量在编译和链接过程中扮演着重要的角色。下面是对每个环境变量的详细说明及示例&#xff1a; CFLAGS&#xff1a;用于设置C编译器的编译选项。 示例&#xff1a;将优化级别设置为最高&#xff0c;启用所有警告信息&#xff0c;并指定目标体系结构为x86-64。 export C…

企业级自动化测试理论(目标、框架要素、深入理解测试金字塔)

1. 自动化测试的目标 自动化测试的目标是加快研发过程&#xff0c;而不是试图省钱。 迅速检测出新版本中不稳定的变更。 迅速暴露程序回归的错误。 迅速报告问题&#xff0c; 因为这会使程序错误修改更容易。 为了达到目标&#xff0c;所需要的测试能力要求 测试技术&…

YITH WooCommerce Questions and Answers电商网站问答功能高级版

点击阅读YITH WooCommerce Questions and Answers电商网站问答功能高级版原文 YITH WooCommerce Questions and Answers电商网站问答高级版的作用在您的产品页面中构建强大的问答部分&#xff0c;以便您的客户可以找到问题的答案并毫无疑问地购买。 您如何从中受益&#xff1…

Java中富文本转markdown

实现富文本即html语法转md&#xff0c;要求是尽可能展示效果一样&#xff0c;可以有少许误差&#xff0c;另外只实现了html中的body转md&#xff0c;其他标签如head等未实现。 大致思路是&#xff1a;通过jsoup工具获取html节点&#xff0c;再穷举替换。前提是熟悉html以及md语…

Doris 编译错误 error: No best alternative for libs/context/build/asm_sources

错误 error: No best alternative for libs/context/build/asm_sources解决方案 打开 doris/thirdparty/src/boost_1_81_0/libs/context/build/Jamfile.v2 在文件未添加 alias asm_sources: asm/make_arm_aapcs_elf_gas.Sasm/jump_arm_aapcs_elf_gas.Sasm/ontop_arm_aapcs_el…

LabVIEW远程监控

LabVIEW远程监控 远程监控的应用场景 从办公室远程监控工厂车间的测试设备。 在世界另一端的偏远地区监控客户现场的发电设备。 从公司远程监控外场的产品。 技术更新与方法 自2018年以来&#xff0c;NI对基于Web的应用程序支持大幅增长。一些最初的方法&#xff08;如Lab…

【PyTorch】模型的基本操作

文章目录 1. 模型的创建1.1. 创建方法1.1.1. 通过使用模型组件1.1.2. 通过继承nn.Module类 1.2. 将模型转移到GPU 2. 模型参数初始化3. 模型的保存与加载3.1. 只保存参数3.2. 保存模型和参数 1. 模型的创建 1.1. 创建方法 1.1.1. 通过使用模型组件 可以直接使用模型组件快速…

3.镜像加速器

目录 1 阿里云 2 网易云 从网络上拉取镜像的时候使用默认的源可能会慢&#xff0c;用国内的源会快一些 1 阿里云 访问 阿里云-计算&#xff0c;为了无法计算的价值 然后登录&#xff0c;登录后搜索 容器镜像服务 点击容器镜像服务 点击管理控制台 点击 镜像工具->镜像…

【web安全】文件包含漏洞详细整理

前言 菜某的笔记总结&#xff0c;如有错误请指正。 本文用的是PHP语言作为案例 文件包含漏洞的概念 开发者使用include&#xff08;&#xff09;等函数&#xff0c;可以把别的文件中的代码引入当前文件中执行&#xff0c;而又没有对用户输入的内容进行充分的过滤&#xff0…

5G入门到精通 - 5G的十大关键技术

文章目录 一、网络切片二、自组织网络三、D2D技术四、低时延技术五、MIMO技术六、毫米波七、内容分发网络八、M2M技术九、频谱共享十、信息中心网络 一、网络切片 5G中的网络切片是一项关键技术&#xff0c;它允许将整个5G网络分割成多个独立的虚拟网络&#xff0c;每个虚拟网络…

CodeBlocks添加头文件,解决fatal error: ui.h No such file or directory

问题描述 在使用codeblocks工具进行LVGL仿真过程中报错&#xff0c;找不到头文件 原因分析&#xff1a; 没有将头文件加入编辑器搜索的目录中&#xff0c;编译时找不到头文件。 解决方案&#xff1a; 将要包含的头文件的目录加进去就可以了

BCI-Two-streams hypothesis(双流假说)

双流假说 双流假设(Two-stream hypothesis)是关于视觉和听觉神经处理的模型。该假设最初由大卫米尔纳&#xff08;David Milner&#xff09;和梅尔文古德尔&#xff08;Melvyn A. Goodale&#xff09;于1992年的一篇论文中进行了初步描述&#xff0c;认为人类拥有两个独立的视觉…

【爬取音乐,并将音乐信息储存到数据库中】

爬取音乐,并将音乐信息储存到数据库中 确定音乐网站的url并分析网站分析二级页面创建数据库使用Xpath解析&#xff0c;进行多层爬取保存信息完整代码结果 确定音乐网站的url并分析网站 分析二级页面 创建数据库 # 创建一个链接对象 conn pymysql.connect(hostmaster, userroo…