2011-07-11 126 views
2

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

这里发生了什么,这怎么解决?

+3

请'打印repr(md5)'和'print repr(abc)',然后**更新**每个打印输出的问题。 –

+0

尝试在第3行上打印'repr(md5)'。你确定它们是一样的吗? – nmichaels

+0

你可以这样做吗?我想在某个地方或某处沿线有一个换行符。试试:'md5.strip()== abc'tead。否则,运行'print repr(md5)'并回传 – phant0m

回答

9

您的md5包含尾随空白,其值abc值不具有。大多数命令行程序都以换行符结束,因为它可能会导致用户不能使用。可以将其输出到standard error流中,以免干扰像您这样的程序,但通常不会这样做。

可以使用字符串方法.strip()从字符串的开头和结尾删除所有空格。例如,

md5 = md5.strip() 

如果你使用Python 3,可能会导致同样的错误,因为Subprocess对象的.communicate()方法返回bytes对象,这不等于任何字符串。

+0

他们不是空间。这是一个windows linebreak。 – phant0m

+0

@ phant0m:windows换行符是两个字符,通常概括为“空白”。 –

+0

@ S.Lott我最初使用的只是“空格”。回复他的评论,我编辑了这篇文章。 –