使用shutil.copy复制文件时获取管理员密码?

时间:2010-09-28 09:04:14

标签: python file-permissions

我使用python中的shutil.copy来复制文件列表。但是当我将文件复制到/ usr / lib / location时,我获得了权限被拒绝,因为我需要成为管理员才能这样做。

那我怎么能用管理员权限或复制文件 我如何从用户那里获得管理员密码来复制文件?

想法将不胜感激

4 个答案:

答案 0 :(得分:3)

让用户以管理员身份运行脚本:

sudo python-script.py

Unix已经具有身份验证和密码管理功能。你不需要自己编写,如果你尝试的话,无疑会出现安全漏洞。

答案 1 :(得分:3)

要添加 katrielalex 所说的内容:如果需要,可以通过sudo使脚本自行运行。这是一个概念证明:

import sys, os, subprocess

def do_root_stuff():
    print('Trying to list /root:')
    for filename in os.listdir('/root'):
        print(filename)

if __name__ == '__main__':
    print('Running as UID %d:' % os.geteuid())

    if os.geteuid() == 0:
        do_root_stuff()
    else:
        subprocess.check_call(['sudo', sys.executable] + sys.argv)

答案 2 :(得分:1)

使用允许在那里写的用户启动您的程序。例如,首先登录到root(su)或使用sudo myscript.py运行脚本。

答案 3 :(得分:0)

我来找她寻找另一种做事方式。 我使用的快速而肮脏的黑客,因为我不希望我的整个脚本以root身份运行:

try:
    shutil.os.remove(file1)
except PermissionError:
    shutil.os.system('sudo chown $USER "{}"'.format(file1))  
    # try again
    try:
        shutil.os.remove(file1)
    except:
        print('Giving up on'.format(file1))

这可能不是完全容易出错的,但它们适用于我一起破解的快速脚本

哎呀,我看到你要求复制权限了。 但你可以应用相同的逻辑

try:
   shutil.os.copy(file1,destination)
except PermissionError:
   shutil.os.system('sudo cp "{}" "{}"'.format(file1,destination))