2011-07-11 145 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我最初使用的只是「空格」。回覆他的評論,我編輯了這篇文章。 –