开发者社区 问答 正文

通过python ctypes以管理员身份启动CMD

我想在CMD中执行命令。但是为此,我需要管理员权限。借助库ctypes,您可以以管理员身份启动cmd之类的程序。但是由于某些原因,cmd不会接管传输参数。然后它也只打开cmd并准备就绪

这是它的代码。


import ctypes
args = 'ipconfig -all'
ctypes.windll.shell32.ShellExecuteW(None, 'runas', 'cmd.exe', args, None, 1)

ipconfig -all仅用于演示目的。任何人都有想法或可以告诉我有关ctypes的文档,其中包括有关ShellExecuteW的信息。

展开
收起
Puppet 2019-12-10 23:04:15 925 分享 版权
阿里云 AI 助理回答

在使用ctypes.windll.shell32.ShellExecuteW时,如果想让命令行直接执行带参数的命令,你需要确保命令和参数被正确地格式化为一个字符串。在你的代码中,你已经尝试将命令和参数分开处理,但实际上它们应该被组合成一个单一的字符串,以确保命令提示符(cmd.exe)能够识别并执行完整的命令。

修改你的代码如下:

import ctypes

# 将命令和参数组合成一个字符串,用空格分隔
command = 'cmd.exe /k ipconfig -all'

# 使用ShellExecuteW方法,注意这里的args应为完整的命令字符串
ctypes.windll.shell32.ShellExecuteW(None, 'runas', command, None, None, 1)

这里做了两处修改: 1. 我将命令和参数合并成了一个字符串 'cmd.exe /k ipconfig -all'。其中,/k 参数告诉 cmd.exe 执行指定的命令后保持窗口打开,这对于查看命令输出很有用。如果你想让窗口在命令执行完毕后自动关闭,可以使用 /c 而不是 /k。 2. 在 ShellExecuteW 的调用中,我将 args 参数设置为了 None,因为我们已经将命令和参数整合到了 command 字符串中。

这样修改后,你应该能够以管理员权限运行命令提示符,并且它会直接执行 ipconfig -all 命令。记得检查你的Python环境是否配置得当,以及用户账户控制(UAC)设置是否允许程序请求提升权限运行。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答分类:
问答标签:
问答地址: