Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 7, 2010 15:39:39

tux.tool
От:
Зарегистрирован: 2010-10-07
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Простой вопрос

Не пинайте, я только учусь. Бьюсь головой уже 3 часа, без внешней помощи буду биться еще долго)

#! /usr/bin/env python
import dns.resolver

domen = open('./day.domen', 'r')
for line in domen:
print line
answers = dns.resolver.query(line, 'MX')
for rdata in answers:
print rdata.exchange

domen.close()
При выполнении:
skv:/mnt/mail/root/python# ./catch_mx.py
'domen.ru'

Traceback (most recent call last):
File "./catch_mx.py", line 7, in <module>
answers = dns.resolver.query(line, 'MX')
File "/usr/lib/python2.5/site-packages/dns/resolver.py", line 719, in query
return get_default_resolver().query(qname, rdtype, rdclass, tcp)
File "/usr/lib/python2.5/site-packages/dns/resolver.py", line 663, in query
raise NXDOMAIN
dns.resolver.NXDOMAIN
Как нужно псать чтобы подставлялась переменная. Я так понял проблема в том что выполняеться:
answers = dns.resolver.query(line, 'MX')
А нужно:
answers = dns.resolver.query('domen.ru', 'MX')
Хотя ipython первый вариант работает.



Офлайн

#2 Окт. 7, 2010 16:53:41

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

Простой вопрос

В файле у вас домены в кавычках, вот оно и пытается резолвить ‘domen.ru’ с кавычками. А с переменными там все нормально.



Офлайн

#3 Окт. 7, 2010 17:05:38

tux.tool
От:
Зарегистрирован: 2010-10-07
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Простой вопрос

Кавычки это уже я сам наставил когда бился головой) Вот выполнение без кавычек.

skv:~/python# ./catch_mx.py 
kzn.ertelecom.ru

Traceback (most recent call last):
File "./catch_mx.py", line 7, in <module>
answers = dns.resolver.query(line, 'MX')
File "/usr/lib/python2.5/site-packages/dns/resolver.py", line 719, in query
return get_default_resolver().query(qname, rdtype, rdclass, tcp)
File "/usr/lib/python2.5/site-packages/dns/resolver.py", line 663, in query
raise NXDOMAIN
dns.resolver.NXDOMAIN



Офлайн

#4 Окт. 7, 2010 17:18:52

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

Простой вопрос

Значит конец строки там. Сделайте line.strip().



Офлайн

#5 Окт. 7, 2010 17:20:27

tux.tool
От:
Зарегистрирован: 2010-10-07
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Простой вопрос

Помогли решить : http://www.linux.org.ru/forum/development/5416445?lastmod=1286461107288

Дело было из-за переноса строк в файле.

#! /usr/bin/env python 

import dns.resolver

domen = open('./day.domen', 'r')
answers = []
for line in domen:
l = dns.resolver.query(line[:-1], 'MX')
for rdata in l:
print 'Host', rdata.exchange, 'has preference', rdata.preference
domen.close()
2Ed: Почти одновременно написали. Спасибо за помощь.



Отредактировано (Окт. 7, 2010 17:21:35)

Офлайн

#6 Окт. 7, 2010 17:51:17

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

Простой вопрос

Я все-таки рекомендую strip. удалит один символ, а их может быть и два в другой операционной системе. И пробелы он тоже удалит, кстати.



Офлайн

#7 Окт. 7, 2010 18:14:40

pyuser
От:
Зарегистрирован: 2007-05-13
Сообщения: 658
Репутация: +  36  -
Профиль   Отправить e-mail  

Простой вопрос

Ed
Я все-таки рекомендую strip
прислушайтесь к совету. во всеми любимой Windows, - будет не корректно, поскольку конец строки это 2 символа - \r\n



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version