gpt4 book ai didi

python - 为什么我无法检查 Python 中 Popen() 的 stderr 的字符串等效性?

转载 作者:行者123 更新时间:2023-12-01 05:32:35 25 4
gpt4 key购买 nike

我正在从 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 block ,因此它会继续执行代码的其余部分并遇到各种错误,因为代码的其余部分需要 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 未定义,因为代码不应该到达该点)

最佳答案

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

在这种情况下,它应该(显然确实是这样:^)表明有一些尾随空格给你带来了麻烦。

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

关于python - 为什么我无法检查 Python 中 Popen() 的 stderr 的字符串等效性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19871779/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com