1

我正在从 Python 脚本运行 ldaplist 命令(不足以保证 ldap 模块):

storage = Popen(["ldaplist", "-l", "passwd", "bob"], stdout=PIPE, stderr=PIPE)
stdout, stderr = storage.communicate()

在此之后,我想根据“stderr”是否与 ldaplist 中的典型“没有这样的用户”错误(即“ldaplist:找不到对象”)相匹配来采取行动

不起作用

if stderr == "ldaplist: Object not found":
   print "No entry exists in passwd for the username you have input."
   sys.exit(1)

然而,这确实

if re.search("^ldaplist: Object not found", stderr):
   print "No entry exists in passwd for the username you have input."
   sys.exit(1)

“不起作用”是指它不属于 if 块,因此它继续执行其余代码并遇到各种错误,因为其余代码期望填充 stdout (如果 stderr 有任何价值,那就不是)。

我认为这与我上面失败的片段无关,但具体的错误是:

Traceback (most recent call last):
  File "./ldaplistTest3.py", line 43, in <module>
    testPasswd = Passwd(dn, sambaProfilePath, sambaHomePath)
NameError: name 'dn' is not defined

(dn 没有定义,因为代码应该永远不会到达那个点)

4

1 回答 1

2

repr是一个非常方便的内置函数,尤其是。用于调试目的。您经常可以使用它来查找易于忽略的空白和看起来像空格但不是的东西等。

在这种情况下,它应该(并且显然做到了:^)表明有一些尾随空格给您带来麻烦。

FWIW 我经常.strip()在进行字符串比较之前调用以避免其中一些问题。

于 2013-11-09T02:48:28.513 回答