Python中的if
语句进行求值,并显示返回非预期值。
p = sub.Popen('md5.exe -n md5.exe',stdout=sub.PIPE,stderr=sub.PIPE)
md5, errors = p.communicate()
print md5
abc = "8D443F2E93A3F0B67F442E4F1D5A4D6D"
print abc
if md5 == abc: print 'TRUE'
else: print 'FALSE'
repr(md5)
是'8D443F2E93A3F0B67F442E4F1D5A4D6D\r\n'
。
2个字符串是相同的,但它评估并打印FALSE
。
这里发生了什么,以及如何解决这个问题?
答案 0 :(得分:9)
您的md5
包含abc
值没有的尾随空格。大多数命令行程序以换行符结束,因为它可能会破坏shell用户不会。可以将其输出到standard error流,以免干扰像您这样的程序,但通常不会这样做。
您可以使用字符串方法.strip()
从字符串的开头和结尾删除所有空格。例如,
md5 = md5.strip()
如果您使用的是Python 3,可能会导致同样的错误,因为Subprocess
对象的.communicate()
方法会返回bytes
个对象,这些对象不等于任何字符串。