使用python缩进或排序问题

时间:2015-07-15 15:13:18

标签: python-2.7

我是python的新手,可能从一些有点复杂的东西开始。然而,我快到了。

我的问题是我在理解如何对我的代码中的一组语句进行分组或排序时遇到一些困难(我的语法也可能是错误的)使用try和except或if,elsif和else。我真的只需要有人说我应该使用它而不是那个,我可以从那里弄明白。

这是我想要完成的图表:

https://drive.google.com/file/d/0BxtxgkV8mylgSFRuMnZtaEpXLVE/view?usp=sharing

这是我的代码到目前为止(请注意这是我的第一个python程序 - 实际上是任何类型的第一个程序 - 所以如果你不会因为任何格式或语法错误而把我撕得太厉害我会很感激 - 更新到包括约翰修复)

.Axes(xlValue, xlSecondary).HasTitle = True

John的建议修复了我的except语法,不是我需要尝试理解为什么程序只运行第一个UID而不是其余的(目前ldap组中有5个,其中2个我手动安装所以我希望发生3个绑定坐骑。

我会感激任何指导,因为我会继续尝试通过反复试验来解决这个问题。

提前致谢。

西蒙

1 个答案:

答案 0 :(得分:0)

因此,在阅读并稍后询问一些明智的同事之后,我对循环如何工作,什么破坏以及继续有用的方式有了更好的理解。

这是我的最后一段代码:

#!/usr/bin/python
import ldap
import os
import subprocess
import uuid
from pwd import getpwnam
# Lookup all the users in the cloudcape group
path='dc=cape'
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:
    # Define the directory paths
    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, if not carry on
    except subprocess.CalledProcessError:
        print uid+" does not have a mountpoint"
    else:
        continue
    # Check if they have /var/www/owncloud/data/UID
    if not os.path.isdir(cloudfiledir):
        print uid+" does not have a owncloud directory structure in /var/www/owncloud, creating it"
        os.makedirs("/var/www/owncloud/data/"+uid+"")
        os.makedirs("/var/www/owncloud/data/"+uid+"/files")
        os.makedirs("/var/www/owncloud/data/"+uid+"/cache")
        # Now set permissions ("+uid+":Domain Users) - os.chown(path, uid, gid) 
        os.chown("/var/www/owncloud/data/"+uid+"", 33, 33)
        os.chown("/var/www/owncloud/data/"+uid+"/files", 33, 33)
        os.chown("/var/www/owncloud/data/"+uid+"/cache/", 33, 33)
    # Now check if the have /home/UID/cloud
    if not os.path.isdir(clouddir):
        # They don't have a cloud directory, creating one
        print uid+" does not have a cloud folder in their home directory, creating it"
        os.makedirs(clouddir)
        # Now set permissions ("+uid+":Domain Users) - os.chown(path, uid, gid)
        os.chown(clouddir, "+uid+", "Domain Users")
    # Now make sure the cloudfilesdir is empty
    try:
        if not os.listdir(cloudfiledir) == []:
            print "The mount point is not empty"
            os.rename(cloudfiledir, cloudfiledir + str(uuid.uuid4()))
            os.makedirs(cloudfiledir)
            os.chown(cloudfiledir, 33, 33)
    except:
        print "The mount point is empty, moving on"

    print "Now let's bind mount the directories"
    # Bind each users home dir to their cloud dir
    filt = "(uid=" + uid + ")"
    userid=l.search_s(path, ldap.SCOPE_SUBTREE, filt, ['uidNumber'])
    print "\t", uid, "filter: ", filt, userid,  "or"
    numuid = userid[0][1]['uidNumber'][0]
    print "\t\t", uid, filt, uid
    os.system('bindfs -M www-data --create-for-user=' + numuid + ' --create-for-group=513 ' + '/home/' + uid + '/cloud' + ' /var/www/owncloud/data/' + uid + '/files')

我毫不怀疑有更简单,更有效的方法来做到这一点但是现在,代码完成了我想要它做的事情。我仍然需要在其中构建一些容错,我已经发现了一个区域,如果某个目录存在但可能会失败,但这是下周的问题。