2010-09-28 2 views
2

Я использую shutil.copy из python, чтобы скопировать список файлов. Но когда я копирую файлы в/usr/lib/location, я получаю разрешение на отказ, так как мне нужно быть администратором.Получение пароля администратора при копировании с помощью shutil.copy?

Так как я могу копировать файлы с правами администратора или как я могу получить пароль администратора от пользователя, чтобы скопировать файлы?

Идеи будут оценены

+0

Не относится к суперпользователю; это как написать команду копирования с Python (язык сценариев). –

ответ

0

Запустите программу с пользователем, которому разрешено писать там. Например, сначала войдите в корневой каталог (su) или запустите сценарий с sudo myscript.py.

2

Сделать пользователь запустить скрипт с правами администратора:

sudo python-script.py 

Unix уже имеет проверку подлинности и управление паролями. Вам не нужно писать свои собственные, и, если вы попробуете, наверняка будут ошибки безопасности.

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

Я пришел к ней, ища альтернативный способ делать вещи. быстрый и грязный хак я использую, потому что я не хочу весь мой скрипт для запуска в качестве корня:

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