Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将输出与列表/数组进行比较 我认为自己在Python和编程方面是初学者。但我正在努力学习python,通过Zed A Shaw的艰苦学习,并放慢了学习速度。 我正在编写一个小脚本来检查一个域的实时mx记录是否如预期的那样,并且没有被改变,长话短说,到目前为止,我有以下内容: import dns.resolver domain = 'bbc.co.uk' for x in dns.resolver.query(domain,'MX',): print x.to_text()_Python_Arrays_List_Mx Record - Fatal编程技术网

将输出与列表/数组进行比较 我认为自己在Python和编程方面是初学者。但我正在努力学习python,通过Zed A Shaw的艰苦学习,并放慢了学习速度。 我正在编写一个小脚本来检查一个域的实时mx记录是否如预期的那样,并且没有被改变,长话短说,到目前为止,我有以下内容: import dns.resolver domain = 'bbc.co.uk' for x in dns.resolver.query(domain,'MX',): print x.to_text()

将输出与列表/数组进行比较 我认为自己在Python和编程方面是初学者。但我正在努力学习python,通过Zed A Shaw的艰苦学习,并放慢了学习速度。 我正在编写一个小脚本来检查一个域的实时mx记录是否如预期的那样,并且没有被改变,长话短说,到目前为止,我有以下内容: import dns.resolver domain = 'bbc.co.uk' for x in dns.resolver.query(domain,'MX',): print x.to_text(),python,arrays,list,mx-record,Python,Arrays,List,Mx Record,这将使用dnspython模块输出mailhost和首选项编号。我现在需要做的是将这个输出与两个预期结果进行比较,因此对于bbc.co.uk来说,这些结果将是cluster1a.eu.messagelabs.comcluster1.eu.messagelabs.com。它们的顺序会根据当前的首选项编号而变化 我认为最好的方法是将预期结果添加到数组/列表中,让脚本尝试将输出与数组/列表进行比较,并提供一个正确或错误的语句,但在花了一整天的时间尝试不同的代码安排之后,到目前为止,这超出了我的理解 最

这将使用dnspython模块输出mailhost和首选项编号。我现在需要做的是将这个输出与两个预期结果进行比较,因此对于bbc.co.uk来说,这些结果将是cluster1a.eu.messagelabs.comcluster1.eu.messagelabs.com。它们的顺序会根据当前的首选项编号而变化

我认为最好的方法是将预期结果添加到数组/列表中,让脚本尝试将输出与数组/列表进行比较,并提供一个正确或错误的语句,但在花了一整天的时间尝试不同的代码安排之后,到目前为止,这超出了我的理解

最后,如果结果是错误的,我希望它提醒我自己或我的同事,但这可以等到以后,因为我还没有决定实现这一点的最佳方法。 任何善良的灵魂都能给我一个大概的轮廓,告诉我实现我所希望的结果的最佳实践是什么

我感谢所有花时间阅读本文的人:

谢谢你,克里斯


编辑:这似乎正是我所希望的,谢谢大家的帮助

import dns.resolver
domain = 'bbc.co.uk'
expected_responses = ['cluster1.eu.messagelabs.com.', 'cluster1a.eu.messagelabs.com.']
for x in dns.resolver.query(domain, 'MX'):
        if x.to_text().split()[1] not in expected_responses:
                print "Unexpected MX record found!"
        else:
                print x.to_text().split()[1] + " OK!"
import dns.resolver
domain = 'bbc.co.uk'
expected_responses = ['cluster1.eu.messagelabs.com.', 'cluster1a.eu.messagelabs.com.']
for x in dns.resolver.query(domain, 'MX'):
        if x.to_text().split()[1] not in expected_responses:
                print "Unexpected MX record found!"
        else:
                print x.to_text().split()[1] + " OK!"
你的意思是:

x.to_text() in {'cluster1a.eu.messagelabs.com', 'cluster1.eu.messagelabs.com'}
你的意思是:

x.to_text() in {'cluster1a.eu.messagelabs.com', 'cluster1.eu.messagelabs.com'}

结果以“XX dns_条目”格式返回,因此您可以执行以下操作:

import dns.resolver
domain = 'bbc.co.uk'
results = []
for x in dns.resolver.query(domain,'MX',):
    results.append(x.to_text().split(' ')[1])
print results

>>> ['cluster1.eu.messagelabs.com.', 'cluster1a.eu.messagelabs.com.']

现在,您可以与此列表进行比较。

结果以“XX dns_entry”格式返回,因此您可以执行以下操作:

import dns.resolver
domain = 'bbc.co.uk'
results = []
for x in dns.resolver.query(domain,'MX',):
    results.append(x.to_text().split(' ')[1])
print results

>>> ['cluster1.eu.messagelabs.com.', 'cluster1a.eu.messagelabs.com.']

现在您可以与此列表进行比较。

好的,首先您必须从x.to_文本返回的内容中删除前导数字:

您可以循环执行,也可以使用列表:

records = [x.to_text().split()[1] for x in dns.resolver.query(domain, 'MX')]
然后确保你期望的一切都在记录里

expected = ['cluster1.eu.messagelabs.com.', 'cluster1a.eu.messagelabs.com.']
if False in [val in records for val in expected] or len(records) != len(expected):
    # Die.

好的,首先你必须删除x.to_文本返回的前导数字:

您可以循环执行,也可以使用列表:

records = [x.to_text().split()[1] for x in dns.resolver.query(domain, 'MX')]
然后确保你期望的一切都在记录里

expected = ['cluster1.eu.messagelabs.com.', 'cluster1a.eu.messagelabs.com.']
if False in [val in records for val in expected] or len(records) != len(expected):
    # Die.
那怎么办

import dns.resolver

expected_domains = set(['cluster1a.eu.messagelabs.com.', 'cluster1.eu.messagelabs.com.'])
domains = set(str(mx.exchange) for mx in dns.resolver.query('bbc.co.uk', 'MX'))
if not domains.issuperset(expected_domains):
    print("Missing MX domains:", ", ".join(expected_domains - domains))
那怎么办

import dns.resolver

expected_domains = set(['cluster1a.eu.messagelabs.com.', 'cluster1.eu.messagelabs.com.'])
domains = set(str(mx.exchange) for mx in dns.resolver.query('bbc.co.uk', 'MX'))
if not domains.issuperset(expected_domains):
    print("Missing MX domains:", ", ".join(expected_domains - domains))

编辑:这似乎正是我所希望的,谢谢大家的帮助

import dns.resolver
domain = 'bbc.co.uk'
expected_responses = ['cluster1.eu.messagelabs.com.', 'cluster1a.eu.messagelabs.com.']
for x in dns.resolver.query(domain, 'MX'):
        if x.to_text().split()[1] not in expected_responses:
                print "Unexpected MX record found!"
        else:
                print x.to_text().split()[1] + " OK!"
import dns.resolver
domain = 'bbc.co.uk'
expected_responses = ['cluster1.eu.messagelabs.com.', 'cluster1a.eu.messagelabs.com.']
for x in dns.resolver.query(domain, 'MX'):
        if x.to_text().split()[1] not in expected_responses:
                print "Unexpected MX record found!"
        else:
                print x.to_text().split()[1] + " OK!"

编辑:这似乎正是我所希望的,谢谢大家的帮助

import dns.resolver
domain = 'bbc.co.uk'
expected_responses = ['cluster1.eu.messagelabs.com.', 'cluster1a.eu.messagelabs.com.']
for x in dns.resolver.query(domain, 'MX'):
        if x.to_text().split()[1] not in expected_responses:
                print "Unexpected MX record found!"
        else:
                print x.to_text().split()[1] + " OK!"
import dns.resolver
domain = 'bbc.co.uk'
expected_responses = ['cluster1.eu.messagelabs.com.', 'cluster1a.eu.messagelabs.com.']
for x in dns.resolver.query(domain, 'MX'):
        if x.to_text().split()[1] not in expected_responses:
                print "Unexpected MX record found!"
        else:
                print x.to_text().split()[1] + " OK!"

更好的是,设置“cluster1a.eu.messagelabs.com”,“cluster1.eu.messagelabs.com”。我不知道如何用构造{a,b,c}来定义集合,请加上你的加号。@werehuman-集合文字语法仅在Python 2.7及更高版本中可用。@larsmans:这会引发错误,集合只接受一个iterable参数。很遗憾。但是,我不知道。更好的是,set'cluster1a.eu.messagelabs.com'、'cluster1.eu.messagelabs.com'。我不知道如何用构造{a,b,c}来定义set,用你的加号。@werehuman-{a,b,c}集文字语法仅在Python 2.7及更高版本中可用。@larsmans:那会抛出一个错误,set只接受一个iterable参数,很遗憾。不过,我不知道。谢谢你的回复!当我进行此更改时,输出是['cluster1.eu.messagelabs.com.]['cluster1.eu.messagelabs.com.','cluster1a.eu.messagelabs.com.]这是有意的吗?谢谢您的回复!当我进行此更改时,输出是['cluster1.eu.messagelabs.com.]['cluster1.eu.messagelabs.com.','cluster1a.eu.messagelabs.com.]这就是我想要的吗?我想这正是我想要的!如果有用的话,我会试试看:我想这正是我想要的!如果有用的话,我会发一篇帖子:@christopher,你用的是哪种python版本?这在Python2.7中非常有效。编辑为适用于python>=2.5我使用的是2.6,预期的_域之间的逗号似乎有错误={'cluster1a.eu.messagelabs.com','cluster1.eu.messagelabs.com'.}@christopher,您使用的是哪个python版本?这在Python2.7中非常有效。编辑为适用于python>=2.5我使用的是2.6,它在预期的_域之间的逗号上似乎有错误={'cluster1a.eu.messagelabs.com','cluster1.eu.messagelabs.com'