You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python写入系统监控信息到TXT文件时内容为None问题求助

问题产生原因
  • run_all_checks()函数没有显式定义返回值,Python中所有无return语句的函数默认返回None,执行str(run_all_checks())得到的就是字符串"None",写入文件后自然仅显示该内容。
  • 写入逻辑被放在if not os.path.exists(...)判断块内,只有首次运行、文件夹尚未创建时才会执行写入,后续文件夹存在时不会更新文件内容。
  • Windows路径中的反斜杠\是Python的转义字符,直接编写路径可能出现转义解析错误,存在隐患。
  • 现有监控函数均为直接打印内容到控制台,没有收集输出结果的逻辑,即使给run_all_checks()加返回语句也无法拿到监控内容。
正确实现方案

方案1:修改函数返回内容(推荐,可维护性更高)

首先调整所有监控函数,将原有print输出改为返回字符串格式的监控结果:

# 示例:原有监控函数修改前后对比
# 修改前
def monitor_cpu_util():
    print(f"CPU使用率: {psutil.cpu_percent()}%")

# 修改后
def monitor_cpu_util():
    return f"CPU使用率: {psutil.cpu_percent()}%\n"

之后修改run_all_checks()函数,收集所有监控结果拼接后返回:

def run_all_checks():
    info_list = [
        montior_cpu_times(),
        monitor_cpu_util(),
        monitor_cpu_cores(),
        monitor_cpu_freq(),
        monitor_RAM_Usage(),
        monitor_disk(),
        monitor_disk_usage(),
        monitor_network()
    ]
    return "".join(info_list)

最后调整主逻辑,修正路径问题、将写入逻辑移出文件夹判断块:

import os
import psutil

# 确保存储文件夹一定存在
save_path = r'C:\System Information Dump'
if not os.path.exists(save_path):
    os.makedirs(save_path)

# 拼接完整文件路径
file_name = "System Info Dump.txt"
complete_name = os.path.join(save_path, file_name)

# 用with上下文管理写入文件,无需手动调用close
with open(complete_name, "a", encoding="utf-8") as f:
    f.write(run_all_checks())
    # 可选:添加时间分隔线,区分不同运行时间的记录
    f.write("\n" + "="*50 + f"\n记录时间: {__import__('datetime').datetime.now()}\n" + "="*50 + "\n\n")

方案2:重定向标准输出(无需修改原有监控函数)

如果不想改动原有监控函数的打印逻辑,可以临时重定向系统标准输出,将所有控制台打印内容直接写入文件:

import os
import sys
import psutil

def run_all_checks():
    # 你的原有函数内容无需修改
    montior_cpu_times()
    monitor_cpu_util()
    monitor_cpu_cores()
    monitor_cpu_freq()
    monitor_RAM_Usage()
    monitor_disk()
    monitor_disk_usage()
    monitor_network()

# 主逻辑
save_path = r'C:\System Information Dump'
if not os.path.exists(save_path):
    os.makedirs(save_path)
complete_name = os.path.join(save_path, "System Info Dump.txt")

# 临时重定向标准输出到文件
with open(complete_name, "a", encoding="utf-8") as f:
    original_stdout = sys.stdout
    sys.stdout = f
    run_all_checks()
    # 恢复默认标准输出,避免影响后续代码运行
    sys.stdout = original_stdout

内容的提问来源于stack exchange,提问作者billy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 18:03:00