【问题标题】:Problems with subprocess call with Python使用 Python 调用子进程的问题
【发布时间】:2018-03-14 10:26:31
【问题描述】:

如何通过子进程调用运行具有管理员权限的子进程? 示例:

subprocess.call(["C:\\WINDOWS\\system32\\WindowsPowerShell\\v1.0\\powershell.exe","Get-HotFix"])

我尝试了runASuser:Administrator,但什么也没用......

我需要它来使用具有管理员权限的 cmd 使用 python 执行以下命令。有谁知道如何做到这一点?

sc config vss start=auto

我觉得

subprocess.call((["runAS","user:Administrator","C\Windows\system32\cmd.exe","sc config vss start=auto"]))

但这不起作用。

【问题讨论】:

  • 感谢您的回答,它的真实/用户:对此感到抱歉。但是如果我写 /user:Mynameuser 这应该不会运行??
  • 应该是subprocess.call(['runas.exe', '/savecred', '/user:Administrator', 'sc.exe config vss start=auto'])。第一次会要求输入密码,但以后会记住。同样,请注意,将“管理员”与 runas.exe 一起使用是绕过 UAC 的一种方法,不应在生产代码中使用,因为该帐户通常被禁用。您可以使用按需运行的任务或服务提升管理员组中的普通帐户。
  • 当然,安装任务或服务需要管理员权限。网上有多个示例显示如何通过 ShellExecute 使用“runas”动词检查管理员访问和重生,该动词通过 UAC 同意对话框请求提升。
  • 哦,非常感谢您所做的一切。我要试试你告诉我的。但我不知道我会开始调查这件事

标签: python windows subprocess


【解决方案1】:

让python代码调用Windows管理员权限

from __future__ import print_function
import ctypes, sys

def is_admin():
    try:
        return ctypes.windll.shell32.IsUserAnAdmin()
    except:
        return False
if is_admin():
    # The code to run is added here
else:
    if sys.version_info[0] == 3:
        ctypes.windll.shell32.ShellExecuteW(None, "runas", sys.executable, __file__, None, 1)
    else:#in python2.x
        ctypes.windll.shell32.ShellExecuteW(None, u"runas", unicode(sys.executable), unicode(__file__), None, 1)

如果你在非管理员权限下运行它,你已经运行了两次代码,第一次运行你没有管理员权限,第二次你有管理员权限。

您可以参考以下文章: https://blog.csdn.net/qq_17550379/article/details/79006655

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-06
    • 1970-01-01
    • 1970-01-01
    • 2011-11-01
    • 1970-01-01
    相关资源
    最近更新 更多