2016-10-16 20 views
0

學習python(已被選中用於其ldap模塊)用於按我的方式拋出的新腳本。我在嘗試使用ldif時遇到了sytntax錯誤。我正在嘗試分配的attrs語法錯誤,直到我將它進一步移動到腳本附近以搜索字段。我不知道是什麼原因,我得到語法錯誤:使用ldap模塊的python2腳本中的語法錯誤

File "UserGroupModify.py", line 66 
    attrs = {} 
     ^
SyntaxError: invalid syntax 

~/Scripts/Termination-Script$ python2 UserGroupModify.py 
    File "UserGroupModify.py", line 69 
    ldif = modlist.addModlist(attrs) 
    ^
SyntaxError: invalid syntax 

的代碼當前如下所示(包括以前的事情,我曾嘗試都用自己的語法錯誤,當我試圖使用它們)。讓它登錄並搜索用戶很簡單,但修改用戶就是我的困難時刻。目前的代碼是未註釋的,來自我在網上找到的一個例子。

#!/usr/bin/env python2 

import ldap 
import getpass 
import ldap.modlist as modlist 

## first you must open a connection to the server 
try: 

#Ignore self signed certs 
    ldap.set_option(ldap.OPT_X_TLS_REQUIRE_CERT, ldap.OPT_X_TLS_NEVER) 

    username = raw_input("LDAP Login: ") 
    passwd = getpass.getpass() 
    userlook = raw_input("User to lookup: ")  

    l = ldap.initialize("ldaps://ldap.example.com:636/") 

    # Bind/authenticate with a user with apropriate rights to add objects 
    l.simple_bind_s("uid="+username+",ou=people,dc=example,dc=com", ""+passwd+"") 
except ldap.LDAPError, e: 
    print(e) 


# The dn of our existing entry/object 
dn = "ou=People,dc=example,dc=com" 

searchScope = ldap.SCOPE_SUBTREE 
searchAttribute = ["uid"] 
#retrieveAttributes = ["ou=Group"] 
retrieveAttributes = ["ou"] 
#searchFilter = "uid=*" 
searchFilter = "(uid="+userlook+")" 
#mod_attrs = [(ldap.MOD_REPLACE, 'ou', 'former-people')] 
attrs = {} 
attrs['member'] = ['uid="+userlook+",ou=former-people,dc=example,dc=com'] 

try: 
    #ldap_result_id = l.search(dn, searchScope, searchFilter, retrieveAttributes) 
    ldap_result_id = l.search(dn, searchScope, searchFilter, retrieveAttributes) 
    while 1: 
     result_type, result_data = l.result(ldap_result_id, 0) 
     if (result_data == []): 
      break 
     else: 
      ## here you don't have to append to a list 
      ## you could do whatever you want with the individual entry 
      ## The appending to list is just for illustration. 
      if result_type == ldap.RES_SEARCH_ENTRY: 
       print(result_data) 
# Some place-holders for old and new values 
#old={'Group':'l.result(ldap_result_id, 0)'} 
#new={'Group':'uid="+userlook+",ou=former-people,dc=example,dc=com'} 
#newsetting = {'description':'I could easily forgive his pride, if he had not mortified mine.'} 
#print(old) 
#print(new) 

# Convert place-holders for modify-operation using modlist-module 
#ldif = modlist.modifyModlist(old,new) 

# Do the actual modification 
#l.modify_s(dn,ldif) 


#l.modify_s('uid="+userlook+,ou=People,dc=example,dc=com', mod_attrs) 
#l.modify_s('uid="+userlook+",ou=People', mod_attrs) 

#moved up due to SyntaxError 
#attrs = {} 
#attrs['member'] = ['uid="+userlook+",ou=former-people,dc=example,dc=com'] 

# Convert our dict to nice syntax for the add-function using modlist-module 
ldif = modlist.addModlist(attrs) 

# Do the actual synchronous add-operation to the ldapserver 
l.add_s(dn,ldif) 

# Its nice to the server to disconnect and free resources when done 
l.unbind_s() 

except ldap.LDAPError, e: 
    print(e) 

任何方向指向什麼是導致錯誤將不勝感激。謝謝

+0

請不要編輯「已解決」和其他噪音到您的問題:接受答案傳達的確切。 –

回答

0

這是一個語法錯誤,除了嘗試沒有。因爲除了except之外還有大量的縮進代碼,所以Python並不認爲它是try的一部分。確保try和except之間的所有內容都是縮進的。

+0

謝謝先生,修正了它......猜測正確的縮進是在我非常糟糕的編碼未來。 :p –

0

你還沒有到達這條線

ldif = modlist.addModlist(attrs) 

因爲伴隨except低於時間結束了您的try塊。但是,由於同一個塊中的內容應該具有相同的縮進,所以縮小了縮進級別並導致語法錯誤。

+0

感謝您的幫助。作爲一個bash主要是scripter,正確的縮進不是我總是這樣做的。猜猜我現在沒有任何選擇。 –