python-2.7 - 套接字.gaierror : [Errno -2] Name or service not known No DNS issue

标签 python-2.7

我正在尝试通过 Python 学习网络脚本。我正在尝试从文件“Device_List”中提取设备名称,然后通过 ssh 连接到设备,在其上执行命令并打印输出。

当我在文件中使用 IP 地址时,它工作正常,但如果我使用主机名,它就不行了。我在 Ubuntu TrustyMac OSX 上都试过了。

我收到以下错误:

FWIP = socket.gethostbyname(name)
socket.gaierror: [Errno -2] Name or service not known

我能够在两台机器上解析主机名,所以这不是 DNS 问题。 此外,如果我从键盘而不是文件输入设备名称,它工作正常。

你能帮我找到问题吗?

我的代码:

import datetime
import paramiko
import socket
import time
import sys
import getpass

with open("Device_List") as dev:
    for name in dev:
        ssh = paramiko.SSHClient()
        ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        Uname = raw_input("Username : ")
        Pw = getpass.getpass()
        print "Connected to ", name
        FWIP = socket.gethostbyname(name)
        ssh.connect(FWIP, username=Uname,password=Pw)
        remote_conn = ssh.invoke_shell()
        remote_conn.send("set cli pager off\n")
        sys.stdout.flush()
        command = raw_input("Enter Command to run : ")
        remote_conn.send(command + "\n")
        time.sleep(2)
        output = remote_conn.recv(65534)
        print output
        print "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"
        print "Moving Onto Next Device..."

    print "Device List Over"

最佳答案

当您遍历文本文件中的行时,例如你的

with open("Device_List") as dev:
    for name in dev:

默认的 I/O 子系统总是包含 '\n' 行结束符。一个原因是,通过这种方式,您可以知道文本文件何时结束, 不会结束最后一行。

习惯于在不需要时使用(例如)dev.rstrip()

关于python-2.7 - 套接字.gaierror : [Errno -2] Name or service not known No DNS issue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42727903/

相关文章:

python - 将 numpy 数组中的一列设置为零

python-2.7 - 在决策树期间导出 graphviz 给出错误

python - GAE 查询中如何实现 filter() 和 get()?

python - 从包的 __init__.py 中屏蔽 python 子模块

python-2.7 - 求解微分方程Sympy

python - 在Python中解析字典中的列表

python - python中变量和打印变量的输出之间的区别

Python 套接字服务器 : sending to multiple clients?

python - 在迭代期间在列表中插入元素

python - Pandas ,如何访问 multiIndex 数据框?