2011-07-11 9 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

'print repr(md5)'と 'print repr(abc)'を実行してから**各印刷物の出力を**更新**してください。 –

+0

3行目に 'repr(md5)'を印刷してみてください。 – nmichaels

+0

できますか:その行に沿ってどこかに何かか何かがあると思います。 try: 'md5.strip()== abc'instead。それ以外の場合は 'print repr(md5)'を実行し、 – phant0m

答えて

9

md5には、末尾の空白が含まれます(abcの値には含まれません)。ほとんどのコマンドラインプログラムは改行で終了します。これは、シェルユーザーにとって邪魔になる可能性があるためです。これをあなたのようなプログラムに干渉しないようにstandard errorストリームに出力することは可能ですが、これはしばしば行われません。

文字列メソッド.strip()を使用すると、文字列の先頭と末尾のすべての空白を削除できます。例えば、

md5 = md5.strip() 

あなたは、Python 3を使用していた場合、同じエラーがSubprocessオブジェクトの.communicate()方法は、任意の文字列に一致しないされbytesオブジェクトを返すため、発生することが可能性があります。

+0

スペースではありません。それは窓の改行です。 – phant0m

+0

@ phant0m:Windowsの改行は2文字で、一般に「空白」としてまとめられています。 –

+0

@ S.Lott私はもともと「スペース」と言っています。彼のコメントに応じて投稿を編集しました。 –

関連する問題