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

6
我正在使用Python中的shutil.copy来复制一组文件。但是当我将文件复制到/usr/lib/位置时,由于需要管理员权限,因此会收到权限被拒绝的错误提示。

那么,我该如何以管理员权限复制文件, 或者如何获取用户的管理员密码以复制文件呢?

欢迎提供您的想法。


不适合在超级用户上发布;这是如何使用Python(脚本语言)编写复制命令的方法。 - Aaron Digulla
4个回答

4

补充一下 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)

4

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

sudo python-script.py

Unix已经具备认证和密码管理功能。你不需要自己编写,如果你试图这样做,必然会存在安全漏洞。


这应该是被接受的答案。 - Jiya

1

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


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))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接