Чоун Операция не разрешена: - PullRequest
0 голосов
/ 12 июня 2019

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

Я скачал zip-файл из API и сохранил его, используя:

with urllib.request.urlopen(req) as response, \
        open(out_folder, 'wb') as out_file:
    shutil.copyfileobj(response, out_file)

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

process = subprocess.Popen(['chown', '-R', f"{user}:{user}", out_folder],
                           stdout=subprocess.PIPE)
process.communicate()

Что не выполняется для каждого оператора, сообщающего, что операция недопустима.

Затем я попытался добавить sudo в список команд, но это только привело к тому, что строка process.communicate() навсегда зависла.

Далее я попробовал:

shutil.chown(out_folder, user=user)

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

shutil.chown(out_folder, group=shared_group)

Это также не удалось, снова с ошибкой разрешения.

Я свежая из идей и не знаю, что делать. Возможно ли сразу записать файлы нужному пользователю?

Ответы [ 2 ]

0 голосов
/ 12 июня 2019

Я нашел рабочее решение:

import pwd
import grp
import os


uid = pwd.getpwnam(usernmae).pw_uid    
gid = grp.getgrnam(groupname).gr_gid
os.chown(out_folder, uid, gid)

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

0 голосов
/ 12 июня 2019

Единственный пользователь, который может выполнить chown в любой момент, - root.Я бы посоветовал вам запускать вашу программу / скрипт как пользователь root (или используя sudo).

chown также можно использовать, когда файл, права доступа которого вы хотите изменить,в той же группе, что и вы, или, если обе группы связаны (см. /etc/groups, извините, я не знаю синтаксис наизусть).

...