【发布时间】:2011-04-18 04:38:33
【问题描述】:
我正在使用 python 中的 shutil.copy 来复制文件列表。但是当我将文件复制到 /usr/lib/ 位置时,我的权限被拒绝,因为我需要成为管理员才能做到这一点。
那么我怎样才能复制具有管理员权限的文件或 我如何从用户那里获取管理员密码来复制文件?
想法将不胜感激
【问题讨论】:
-
不属于超级用户;这是用 Python(脚本语言)编写复制命令的方法。
我正在使用 python 中的 shutil.copy 来复制文件列表。但是当我将文件复制到 /usr/lib/ 位置时,我的权限被拒绝,因为我需要成为管理员才能做到这一点。
那么我怎样才能复制具有管理员权限的文件或 我如何从用户那里获取管理员密码来复制文件?
想法将不胜感激
【问题讨论】:
让用户以管理员身份运行脚本:
sudo python-script.py
Unix 已经有了身份验证和密码管理。你不需要自己写,如果你尝试肯定会出现安全漏洞。
【讨论】:
补充一下 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)
【讨论】:
以允许在此处编写的用户启动您的程序。例如先登录到 root (su) 或使用 sudo myscript.py 运行脚本。
【讨论】:
我来找她是为了寻找另一种做事方式。 我使用的一个快速而肮脏的 hack,因为我不希望我的整个脚本以 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))
【讨论】: