我想在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的信息。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在使用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)设置是否允许程序请求提升权限运行。