alexmihajlov
Окт. 3, 2013 13:05:52
Добрый день.
В целях обучения решил переписать все свои скрипты на sh на python
Есть скриптик на шелле, который в некоторый момент делает
chgrp -R updater /usr/local/www/hosting/$DIR
chmod -R g+rwX /usr/local/www/hosting/$DIR
Как это будет на питоне? Я осилил только рекурсивный чмод, но это немножко не то, и не так - он меняет права на свои, а не редактирует существующие.
for root, dirs, files in os.walk(path):
for d in dirs:
os.chmod(root + ‘/’ + d, 0o777)
for f in files:
os.chmod(root + ‘/’ + f, 0o666)
Или лучше не морочится и использовать os.system? Как правильней? Спасибо.
JOHN_16
Окт. 3, 2013 15:28:59
alexmihajlov
но это немножко не то, и не так - он меняет права на свои, а не редактирует существующие
это как? у меня как то все верно отрабатывает.
alexmihajlov
Окт. 3, 2013 15:56:40
Ну есть разница между
chmod 0755 и
chmod g+rwX
Во первом случае на файл устанавливаются права -rwxr-xr-x, какие бы до этого права на файле не стояли,
а во втором случае правятся только права на группу.
Результатом работы этой команды могут быть права и
r-xrw-r– и rwxrw—- и даже drwxrwxr-x в зависимости от того, какие права раньше стояли на файле и файл ли это.
Как я понял из документации -
os.chmod(dir, 0o755) - аналог первого варианта (chmod 0755), он игнорирует те права, которые стояли раньше
Мне же нужен второй вариант chmod-а.
Как правильно себя вести в этой ситуации?
agalen
Окт. 3, 2013 16:25:32
Прочитай перед изменением существующие права с помощью os.stat и вычисляй нужные.
JOHN_16
Окт. 4, 2013 15:16:29
alexmihajlovтогда вам скорее всего нужен модуль
stat