这是关于这篇文章的另一个问题:Python raw_input with forced TLD?
我已经检查过字符串是否以TLD结尾,
TLD = ('.com', '.info', '.org', '.net')
if raw_input("Please enter a hostname").endswith(TLD):
# blah blah
但我试图将raw_input存储到变量中。正确的编码实践是否应该做以下事情:
TLD = ('.com', '.info', '.org', '.net')
hostName = raw_input(":").lower()
<<piece of code that determines if hostName does in fact end with a TLD?>>
如果是这样,那会是什么样子?我尝试了一段时间的真实:和if if elif声明,但我没有得到任何地方,我搜索无休止地没有结果,这就是为什么我在这里发布这个问题。
相关程序将获取主机名,例如google.com,确定其是否具有有效的TLD,剥离主机名的TLD off 并将其存储在hostNameshort中(两者都将在以后使用) ,如果它没有再次获得正确的TLD提示,强调它在输入时间内需要TLD,然后一旦继续就继续。
答案 0 :(得分:1)
这样的事情:
TLD = ('.com', '.info', '.org', '.net')
hostName = raw_input(":").lower()
while not hostName.endswith(TLD):
print "Incorrect input, Try again!"
hostName = raw_input(":").lower()
演示:
:foo.bar
Incorrect input, Try again!
:google.in
Incorrect input, Try again!
:yahoo.com
答案 1 :(得分:1)
用于测试TLD的实际DNS查找
哦,虽然我们在这里,但实际测试顶级域名(TLD)对DNS服务器的简短片段可能会变得很方便。我正在使用Nominum人员的dnspython
模块:
import dns.resolver
def testTLD(tld):
try:
dns.resolver.query(tld + '.', 'SOA')
return True
except dns.resolver.NXDOMAIN:
return False
for tld in ('com', 'org', 'klonk', 'dk'):
print "TLD \"{tld}\" exists: {bool}".format(tld=tld, bool=testTLD(tld))
它的运行方式如下:
TLD "com" exists: True
TLD "org" exists: True
TLD "klonk" exists: False
TLD "dk" exists: True