【问题标题】:Set administrator privileges to subprocess.check_call() in Python在 Python 中将管理员权限设置为 subprocess.check_call()
【发布时间】:2013-12-28 15:27:42
【问题描述】:

我从 python 脚本调用两个可执行文件,一个需要管理员权限,另一个不需要管理员权限。有什么方法可以在执行可执行文件之前设置管理员权限,这样它就不会询问我的密码。

我的脚本如下

import subprocess

subprocess.check_call(['DoesnotNeedAdminPrivilege.exe'])
subprocess.check_call(['NeedsAdminPrivilege.exe'])

我尝试通过启动 cmd 以作为管理员运行来从 cmd 运行此脚本。有没有办法将这些管理员权限传递给第二个可执行文件,以便它可以正常工作

【问题讨论】:

  • 你能以管理员权限运行初始 python 调用并在运行前输入凭据吗?
  • subprocess.check_call(['runas', '/noprofile', '/user:Administrator', 'NeedsAdminPrivilege.exe']) ?
  • 我想把这个 .py 文件转换成 .exe 文件。所以我只想以管理员身份运行这个转换后的 .exe 文件,这应该会导致第二个子进程调用以管理员身份运行。这甚至可能吗?

标签: python windows


【解决方案1】:

我发现了一个讨厌的解决方法

    f = open('test.cmd', 'w+')
    f.write("execute.exe")
    f.close()

    os.system("runas /savecred /profile /user:Administrator \"test.cmd\"")

或者你可以使用子进程

【讨论】:

    【解决方案2】:

    试试这个输入管理密码。

    import subprocess as sp
    
    sp.check_call(['DoesnotNeedAdminPrivilege.exe'])
    prog = sp.Popen(['runas', '/noprofile', '/user:Administrator', 'NeedsAdminPrivilege.exe'],stdin=sp.PIPE)
    prog.stdin.write('password')
    prog.communicate()
    

    以下是相关文档:

    Popen - http://docs.python.org/2/library/subprocess.html#popen-constructor

    runas - http://technet.microsoft.com/en-us/library/cc771525.aspx

    这是否可行将取决于程序 NeedsAdminPrivilege。

    【讨论】:

    • 不用输入密码就更好了。有什么办法可以避免让用户输入密码?
    • 谈到您问题中的代码:如果您首先使用 admin priv 启动脚本,那么无论他们是否需要,两个孩子都应该获得 Admin priv。那么……你能回答 JonathanV 的问题吗?所有其他答案都是 hack(运行我的答案或关闭 UAC)
    • @Back2Basics,我试图让这段代码正常工作但没有成功。你确定它有效吗?
    • 我忘记将子进程别名为 sp 除了我一直使用它。
    猜你喜欢
    • 2013-09-27
    • 1970-01-01
    • 2019-04-02
    • 2012-07-31
    • 2014-04-18
    • 2016-01-30
    • 2012-10-13
    • 1970-01-01
    • 2018-11-14
    相关资源
    最近更新 更多