2016-07-18 1 views
0

Я пытаюсь открыть новый файл и сразу же предоставить ему полные системные права на чтение/запись/выполнение. Я делаю это так:У пользователя нет разрешений использовать os.chmod()

csvout = open("/Users/me/Google Drive/documentation/report.csv","w") 
os.chmod("/Users/me/Google Drive/documentation/report.csv", 0o777) 

Эта команда работает для меня и еще один сотрудник (который запускает его с ее счета:/Users/Коллега /, но сохраняет его в каталоге в моем счете, который я дал полные права на чтение/запись). Однако второй сотрудник получает сообщение об ошибке, когда он достигает линии os.chmod, потому что у него явно нет прав на использование chmod в файле.

Иногда файл report.csv существует до запуска, а иногда и нет, но я не вижу, как это изменит что-либо, поскольку оно будет перезаписано, открыв файл с параметром «w» в любом случае.

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

+1

В чем ваш вопрос? –

+0

@FredLarson отредактировал для уточнения – cadams

+0

Только владелец файла может изменять разрешения. Поэтому, если файл уже существует, когда коллега запускает скрипт, он будет принадлежать предыдущему пользователю, и они не смогут изменять разрешения. – Barmar

ответ

0

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

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

Следующий пользователь сможет открыть файл для записи. Когда они попытаются использовать os.chmod(), они получат сообщение об ошибке, поскольку они не являются владельцем файла. Но поскольку у него уже есть требуемые разрешения, это не должно быть проблемой.

Использовать блок try вокруг вызова os.chmod(), чтобы игнорировать эту ошибку.