我使用python中的shutil.copy来复制文件列表。但是当我将文件复制到/ usr / lib / location时,我获得了权限被拒绝,因为我需要成为管理员才能这样做。
那我怎么能用管理员权限或复制文件 我如何从用户那里获得管理员密码来复制文件?
想法将不胜感激
答案 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))