2

以“只是另一个初学者”作为开头。当您通过 Popen 命令获得 whois 命令的结果时,如何测试它是否良好?

通常,当 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)
4

1 回答 1

1

要回答您的直接问题,请在命令输出中查找此字符串whois以查看是否存在问题...

“insert_domain_here”不匹配

为了解决您的任务中其他有意义的问题...您的Popen命令正在以艰难的方式进行...您不需要PIPEforstdin并且可以.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)
于 2011-11-27T23:21:35.037 回答