Найти - Пользователи
Полная версия: Простой вопрос
Начало » Python для новичков » Простой вопрос
1
tux.tool
Не пинайте, я только учусь. Бьюсь головой уже 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 первый вариант работает.
Ed
В файле у вас домены в кавычках, вот оно и пытается резолвить ‘domen.ru’ с кавычками. А с переменными там все нормально.
tux.tool
Кавычки это уже я сам наставил когда бился головой) Вот выполнение без кавычек.
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
Ed
Значит конец строки там. Сделайте line.strip().
tux.tool
Помогли решить : 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: Почти одновременно написали. Спасибо за помощь.
Ed
Я все-таки рекомендую strip. удалит один символ, а их может быть и два в другой операционной системе. И пробелы он тоже удалит, кстати.
pyuser
Ed
Я все-таки рекомендую strip
прислушайтесь к совету. во всеми любимой Windows, - будет не корректно, поскольку конец строки это 2 символа - \r\n
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB