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

使用Python subprocess以管理员权限打开新CMD窗口执行命令报错

解决subprocess调用runas获取管理员权限执行命令的问题

错误原因分析

  • 第一段代码的问题:
    • subprocess.Popen的命令列表格式错误,必须将每个命令/参数拆分为单独的列表元素,不能把cmd.exe /K "CoreServer.exe -c -s"作为单个元素传递。
    • 命令顺序逻辑错误,runas应作为主命令,后续参数需指定用户及要执行的目标命令。
  • 第二段代码的问题:
    • 给"CoreServer.exe -c -s"添加了多余引号,runas会将整个带引号的字符串识别为单个可执行文件路径,导致找不到文件;若要传递带参数的命令,需通过cmd /c包裹执行。

正确实现代码

方案1:通过runas打开管理员CMD并执行指定命令

import subprocess
from subprocess import CREATE_NEW_CONSOLE
import os

def OpenServers():
    echoServerFullPath = "你的CoreServer.exe所在目录路径"  # 替换为实际路径
    print(f"Full path {echoServerFullPath}")
    print(os.path.exists(echoServerFullPath))
    os.chdir(echoServerFullPath)
    
    # 正确拆分命令参数:runas为主命令,依次指定用户、要执行的cmd命令
    command = [
        "runas",
        "/user:Administrator",
        'cmd.exe /K "CoreServer.exe -c -s"'
    ]
    subprocess.Popen(command, creationflags=CREATE_NEW_CONSOLE)

方案2:拆分cmd参数避免引号转义问题

如果担心引号转义引发异常,可以进一步拆分cmd的参数:

import subprocess
from subprocess import CREATE_NEW_CONSOLE
import os

def OpenServers():
    echoServerFullPath = "你的CoreServer.exe所在目录路径"
    os.chdir(echoServerFullPath)
    
    # 拆分cmd的命令与参数为列表
    cmd_command = ["cmd.exe", "/K", "CoreServer.exe", "-c", "-s"]
    # 将cmd命令列表拼接为字符串,传递给runas
    runas_command = ["runas", "/user:Administrator", " ".join(cmd_command)]
    subprocess.Popen(runas_command, creationflags=CREATE_NEW_CONSOLE)

注意事项

  • 确保Administrator账户存在且已启用,若使用其他管理员账户,替换为对应用户名即可。
  • 若CoreServer.exe不在当前工作目录,建议使用完整绝对路径(如"C:\\apps\\CoreServer.exe"),避免路径找不到的问题。
  • 执行代码后会弹出CMD窗口要求输入管理员密码,输入正确后才会执行目标命令。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 20:39:19