簡體   English   中英

將輸出與列表/數組進行比較

[英]Comparing output to a list/array

我認為自己是python(和一般來說編程!)的初學者,但是我正在通過Zed A Shaw的“以艱難的方式學習python”的工作,並且正在慢慢地整理東西。 我正在編寫一個小腳本,以檢查域的實時mx記錄是否符合預期且尚未更改(長話),到目前為止,我具有以下內容:

import dns.resolver
domain = 'bbc.co.uk'
for x in dns.resolver.query(domain,'MX',):
    print x.to_text()

這使用dnspython模塊吐出郵件主機和首選項編號。 我現在需要做的是將此輸出與兩個預期結果進行比較,因此對於bbc.co.uk,這些將是cluster1a.eu.messagelabs.com。 &cluster1.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!"

你的意思是:

x.to_text() in {'cluster1a.eu.messagelabs.com', 'cluster1.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_text()返回值的x.to_text()數字:

txt = '20 cluster1a.eu.messagelabs.com.' # an example x.to_text()
txt = txt.split()[1] # Get rid of everything before (and including) the first space.

您可以循環執行此操作,也可以使用列表理解:

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
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!"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM