Получение пароля администратора при копировании файла с помощью shutil.copy? - PullRequest
2 голосов
/ 28 сентября 2010

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

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

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

Ответы [ 4 ]

3 голосов
/ 28 сентября 2010

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

sudo python-script.py

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

3 голосов
/ 29 сентября 2010

Чтобы добавить к тому, что 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)
1 голос
/ 28 сентября 2010

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

0 голосов
/ 23 августа 2017

Я пришел к ней в поисках альтернативного способа ведения дел.Я использую быстрый и грязный хак, потому что я не хочу, чтобы весь мой скрипт запускался как 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))
...