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

求助:如何在Python 2中实现获取Windows防火墙状态功能

如何在Python 2中获取Windows防火墙状态(替代Python 3的subprocess.getoutput)

问题描述

我在Python 3中使用以下代码获取Windows防火墙所有配置文件的状态:

import subprocess
def get_firewall_state():
    FW = []
    result = subprocess.getoutput('netsh advfirewall show allprofiles state').split()
    for x in result[5::6]:
        FW.append(x)
    return FW

执行后能得到预期结果:['ON', 'ON', 'ON']。但在Python 2中运行时,虽然已经安装并导入了subprocess模块,却提示不存在subprocess.getoutput函数,无法实现相同功能。请问如何在Python 2中实现相同的结果?


解决方案

问题出在subprocess.getoutput()是Python 3.1及以上版本才新增的函数,Python 2的subprocess模块并没有提供这个方法。不过我们可以用Python 2支持的subprocess.Popen来完全模拟它的行为,下面给你两种可行的实现方式:

方案一:用Popen模拟getoutput的完整行为(推荐)

这个方案会同时捕获命令的标准输出和错误输出,和Python 3中getoutput的逻辑完全一致,不管命令执行成功还是失败都会返回输出内容:

import subprocess

def get_firewall_state():
    FW = []
    # 执行命令,合并stdout和stderr
    proc = subprocess.Popen(
        'netsh advfirewall show allprofiles state',
        stdout=subprocess.PIPE,
        stderr=subprocess.STDOUT,
        shell=True
    )
    # 获取命令输出(Python2中返回字节流,需要解码为字符串)
    output, _ = proc.communicate()
    # Windows系统下通常用gbk编码解码,可根据实际系统编码调整
    result = output.decode('gbk').split()
    # 和Python3代码一样的逻辑提取状态
    for x in result[5::6]:
        FW.append(x)
    return FW

方案二:用check_output实现(适合Python 2.7+)

如果你的Python 2版本是2.7及以上,可以用subprocess.check_output(),但它默认只捕获标准输出,命令出错时会抛出异常,所以我们需要捕获异常来获取错误输出,模拟getoutput的容错性:

import subprocess

def get_firewall_state():
    FW = []
    try:
        # 执行命令,获取标准输出
        output = subprocess.check_output(
            'netsh advfirewall show allprofiles state',
            shell=True
        )
    except subprocess.CalledProcessError as e:
        # 命令执行出错时,获取错误输出
        output = e.output
    # 解码为字符串并处理结果
    result = output.decode('gbk').split()
    for x in result[5::6]:
        FW.append(x)
    return FW

测试验证

运行上面任意一个函数,都能得到和Python 3中一样的结果:['ON', 'ON', 'ON'],完美实现你的需求。

内容的提问来源于stack exchange,提问作者Park Yo Jin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:57:51