Ошибка проверки команды Python Popen WHOIS OS - PullRequest
2 голосов
/ 28 ноября 2011

Предваряя это текстом «просто еще один новичок». когда вы получаете результат команды whois через команду Popen, как вы проверяете, хорошо ли это?

Обычно, когда Python возвращает список того, что вы можете проверить, его длина обычно достаточна для меня, но это немного более произвольно.

например, Я тестирую домены в стране происхождения, но иногда домены, которые мне дает gethostbyaddr, не распознаются сервером WHOIS. Итак, я подумал, что в случае неудачи отправлю ему ip, но я закончил этот тест на не менее 70 символов. Просто интересно, знает ли кто-нибудь, каков «стандартный» способ сделать это.

w = Popen(['whois', domain], stdout=PIPE, stdin=PIPE, stderr=STDOUT)
                whois_result = w.communicate()[0]
                print len(whois_result)
                if len(whois_result) <= 70:
                        w = Popen(['whois', p_ip], stdout=PIPE, stdin=PIPE, stderr=STDOUT)
                        whois_result = w.communicate()[0]
                        print len(whois_result)
                        if len(whois_result) <= 70:
                                print "complete and utter whois failure, its you isnt it, not me."
                        test = re.search("country.+([A-Z].)",whois_result)
                        countryid = test.group(1)

1 Ответ

1 голос
/ 28 ноября 2011

Чтобы ответить на ваш прямой вопрос, найдите эту строку в выходных данных команды whois, чтобы узнать, возникла ли проблема ...

Нет соответствия для "insert_domain_here"

Для решения других значимых проблем в вашей задаче ... ваша команда Popen решает сложные задачи ... вам не нужно PIPE для stdin, и вы можете позвонить .communicate() прямо на Popen, чтобы сделать это немного более эффективным ... Я переписал с тем, что я думаю, вы имеете в виду ...

from subprocess import Popen, PIPE, STDOUT
import re

## Text result of the whois is stored in whois_result...
whois_result = Popen(['whois', domain], stdout=PIPE,
    stderr=STDOUT).communicate()[0]
if 'No match for' in whois_result:
    print "Processing whois failure on '%s'" % domain
    whois_result = Popen(['whois', p_ip], stdout=PIPE,
        stderr=STDOUT).communicate()[0]
    if 'No match for' in whois_result:
            print "complete and utter whois failure, its you isnt it, not me."
    test = re.search("country.+([A-Z].)",whois_result)
    countryid = test.group(1)
...