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

Python调用cmd命令quser报错未识别,如何获取其输出?

解决Python调用quser命令提示不存在的问题

我来帮你搞定这个问题——你遇到的'quser' 不是内部或外部命令错误,大概率是32位Python和64位Windows的文件系统重定向导致的,再加上路径调用的小细节问题,咱们一步步来修复:

问题根源

quser是Windows自带的系统工具,实际路径是C:\Windows\System32\quser.exe,但如果你的Python是32位版本,它会自动把System32目录重定向到SysWOW64(专门存放32位系统文件的目录),而SysWOW64里并没有quser.exe,所以直接调用就会报错。

解决方案

1. 用Sysnative路径绕过重定向

Windows提供了C:\Windows\Sysnative这个虚拟路径,它能让32位程序直接访问64位的System32目录。修改你的代码,直接指定这个路径:

import subprocess

# 调用64位的quser.exe
p = subprocess.Popen(
    r"C:\Windows\Sysnative\quser.exe",
    shell=False,  # 不需要shell=True,直接调用可执行文件更可靠
    stdout=subprocess.PIPE,
    stderr=subprocess.PIPE,
    text=True  # 让输出直接是字符串,不用手动解码字节
)
out, err = p.communicate()

if err:
    print(f"执行出错: {err.strip()}")
else:
    print(out)

2. 换成64位Python(更彻底的方案)

如果你的系统是64位的,直接安装64位的Python 3.7.3,这样就能直接调用quser或者C:\Windows\System32\quser.exe,不会有路径重定向的麻烦。

3. 提取用户信息并执行注销

拿到quser的输出后,你可以解析出会话ID,然后用logoff命令注销指定用户。比如要注销用户Doe:

# 解析quser输出
if out:
    # 跳过表头行,处理用户数据
    user_lines = out.strip().split('\n')[1:]
    for line in user_lines:
        # 分割行内容(处理连续空格的情况)
        parts = [item for item in line.split() if item]
        username = parts[0]
        session_id = parts[2]
        
        if username == "Doe":
            # 执行注销命令,需要管理员权限
            try:
                subprocess.run(
                    ["logoff", session_id],
                    check=True,
                    stdout=subprocess.PIPE,
                    stderr=subprocess.PIPE,
                    text=True
                )
                print(f"成功注销用户 {username}")
            except subprocess.CalledProcessError as e:
                print(f"注销失败: {e.stderr.strip()}")

注意事项

  • 权限问题:注销其他用户需要管理员权限,运行Python脚本时要右键选择「以管理员身份运行」。
  • shell=True的坑:尽量不要用shell=True,直接调用可执行文件更安全,也能避免一些环境变量的异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:15:16