Python If语句返回错误的值?

Python If语句返回错误的值?,python,string,if-statement,Python,String,If Statement,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)是'8D443F2E9

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'

这两个字符串是相同的,但它计算并打印
FALSE


这里发生了什么,如何解决这个问题?

您的
md5
包含尾随空格,而
abc
值没有尾随空格。大多数命令行程序以换行结束,因为它可能会对shell用户造成中断。可以将其输出到流中,这样就不会干扰像您这样的程序,但这通常不会完成

可以使用string方法删除字符串开头和结尾的所有空白。比如说,

md5 = md5.strip()


如果您使用的是Python 3,则可能会导致相同的错误,因为
子流程
对象的
.communicate()
方法返回
字节
对象,这些字节不等于任何字符串。

打印repr(md5)
打印repr(abc)
,然后用每次打印的输出更新问题。尝试在第3行打印
repr(md5)
。你确定它们是一样的吗?你能做到吗:我想在某个地方或者沿着这条线的某个地方有一条断线。尝试:
md5.strip()==abc
。否则,请运行打印报告(md5)并发回请使用每个打印语句的输出更新问题。请包括这两项产出。请更新问题。“两个字符串相同”声明为false。如果您的目标不是了解子流程模块如何工作,则可能需要签出。它们不是空格。这是一个windows换行符。@phant0m:windows换行符是两个字符,通常概括为“空白”。@s.Lott我最初使用的是“空格”。我编辑了这篇帖子以回应他的评论。@Jeremy Banks:@Phantom的评论仍然几乎是错误的,不管问题说了什么或没有说什么。@s.Lott:我知道这是两个字符。。。这就是为什么有两个逃逸序列。。。不过你说得有道理,措辞本可以更好。