Если оператор возвращает неправильное значение? - PullRequest
2 голосов
/ 12 июля 2011

Оператор if в Python оценивает и, по-видимому, возвращает непредвиденное значение.

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.

Что здесь происходит и как это можно решить?

1 Ответ

9 голосов
/ 12 июля 2011

Ваш md5 содержит конечные пробелы, которых нет у значения abc. Большинство программ командной строки заканчиваются переводом строки, потому что это может помешать пользователям оболочки не делать этого. Можно вывести это в поток standard error , чтобы не мешать таким программам, как ваша, но это часто не делается.

Вы можете использовать строковый метод .strip(), чтобы удалить все пробелы в начале и конце строки. Например,

md5 = md5.strip()

Если бы вы использовали Python 3, такая же ошибка могла быть вызвана тем, что метод .communicate() объекта Subprocess возвращает bytes объекты, которые не равны никаким строкам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...