Я новичок в python и, вероятно, начал с чего-то немного сложного. Тем не менее, я почти там.Проблемы с отступом или секвенированием с python
Моя проблема заключается в том, что я немного затрудняюсь понять, как группировать или упорядочивать группу операторов в моем коде (мой синтаксис также, вероятно, ошибочен) с помощью try и except или if, elsif и else. Мне действительно нужно, чтобы кто-то сказал, что я должен использовать это вместо этого, и я могу понять это оттуда.
Вот диаграмма того, что я пытаюсь сделать:
https://drive.google.com/file/d/0BxtxgkV8mylgSFRuMnZtaEpXLVE/view?usp=sharing
И вот мой код до сих пор (обратите внимание, что это моя первая программа питон - на самом деле первая программа любого рода - так Я был бы признателен, если вы не разорвет меня на части слишком плохо для любого форматирования или синтаксических ошибок - обновленными включить Johns FIX)
import ldap
import os
import subprocess
import uuid
from pwd import getpwnam
# Lookup all the users in the cloud group
path='dc=saao'
l=ldap.open('ldap1.cape')
l.protocol_version = ldap.VERSION3
l.simple_bind('dc=cape')
a=l.search_s(path,ldap.SCOPE_SUBTREE,'cn=cloudcape')
# Add members to uids
uids=a[0][1]['memberUid']
# Check if a bindmount already exists or it not, that each cloud group user has the required directory i.e. /home/USER/cloud and /var/www/owncloud/data/USER/files
for uid in uids:
cloudfiledir="/var/www/owncloud/data/"+uid+"/files"
clouddir="/home/"+uid+"/cloud"
try:
subprocess.check_output(["mountpoint", cloudfiledir])
# If the output is all good, their bind mount is setup and mounted
break
except:
print uid+" has not logged into ownCloud yet - please ask them to do so and then try again"
break
# Now check if they have the required directories
try:
if os.path.isdir(cloudfiledir):
print "user "+ uid +" has a data directory in the owncloud data directory- this is good."
if os.path.isdir("/home/"+uid+"/cloud"):
print "user "+ uid +" has a cloud dir in their home directory - this is good."
else:
# They don't have a cloud directory, creating one
print uid+" does not have a cloud folder in their home directory, creating it"
if not os.path.exists("/home/"+uid+"/cloud"):
os.makedirs("/home/"+uid+"/cloud")
# Now set permissions ("+uid+":Domain Users) - os.chown(path, uid, gid)
os.chown("/home/"+uid+"/cloud", "+uid+", "Domain Users")
else:
break
# Now make sure the cloufilesdir is empty
if not os.listdir(cloudfiledir):
print "Empty"
break
except:
print "rename and recreate the folder"
os.rename(clouddir, clouddir + str(uuid.uuid4()))
os.makedirs(clouddir)
os.chown(clouddir, 33, 33)
print "Now let's bind mount the directories"
# Bind each users home dir to their cloud dir
# Eg: bindfs -M www-data --create-for-user=1168 --create-for-group=513 /home/simon/cloud /var/www/owncloud/data/simon/files
# Still figuring this bit out
for user in a[0][1]['memberUid']:
filt = "(uid=" + user + ")"
u=l.search_s(path, ldap.SCOPE_SUBTREE, filt, ['uidNumber'])
print "\t", user, "filter: ", filt, u, "or"
uid = u[0][1]['uidNumber'][0]
print "\t\t", user, filt, uid
command = 'bindfs -M www-data --create-for-user=' + uid + ' --create-for-group=513 ' + '/home/' + user + '/cloud' + ' /var/www/owncloud/data/' + user + '/files'
print "BINGO: ", command, "\n"
совет Джона фиксированной мой, кроме синтаксиса, не мне нужно, чтобы попытаться понять, почему программа ОНЛ y запускается для первого UID, а не для остальных (в настоящее время в группе ldap есть 5, из которых я вручную смонтирован, поэтому ожидаю, что произойдет 3 привязки привязок).
Я был бы признателен за любые рекомендации, поскольку я продолжаю пытаться понять это путем проб и ошибок.
Заранее спасибо.
Simon
Мне трудно поверить, что это буквально ваша первая программа. Если так - это слишком амбициозно. В любом случае ваш 'except' должен иметь уровень отступа, который соответствует соответствующему' try' –
. Спасибо John Coleman. Я согласен, что это слишком амбициозно, но мой проект требует этого, поэтому я должен был учиться на резком конце. Я буду реализовывать ваши предложения и отзывы. –