\ n正在弄乱我的脚本

时间:2016-01-08 21:35:59

标签: python cisco

如果我在main函数中分配一个列表,我会有一个成功运行的脚本,但是我需要在100多个设备上运行它。我花了一些时间研究,我认为最好的方法是将变量存储在文本文件中并以这种方式访问​​它。 (当然,如果有人知道更好的方式,我全都是为了它!)

我现在的问题是,当我尝试将现有代码转换为充满变量的新文本文件时,我得到了:

TypeError: getaddrinfo() argument 1 must be string or None"

我很确定我因为\n换行而看到了这些,因为它会在最后一行失败并且那个有效。

到目前为止,我已经尝试了line.split&将txt文件保存为.csv并将分隔符更改为\n,但两者都没有像我预期的那样工作。

以下是有效的脚本:

import sys, os, string, threading
import getpass
import paramiko
import time


cmd = "sh vl bri"
lanid = 'admin'
pwd = 'password'


outlock = threading.Lock()

def workon(host):
    ssh = paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    ssh.connect(host, username=lanid, password=pwd)
    stdin, stdout, stderr = ssh.exec_command(cmd)
    #print stdout.read()
    stdin.flush()

    with open("output-" + host + ".txt", 'w+') as f:
        f.seek(0)
        f.write(stdout.read())

    with outlock:
        print stdout.readlines()
        #f.write(stdout)


def main():
    hosts = ['sw1', 'sw2', 'sw3'] # etc
    threads = []
    for h in hosts:
        t = threading.Thread(target=workon, args=(h,))
        t.start()
        threads.append(t)
    for t in threads:
        t.join()


main()

编辑1

import sys, os, string, threading
import getpass
import paramiko
import time


cmd = "sh vl bri"
#lanid = raw_input("Enter your uname: ")
lanid = 'admin'
pwd = 'password'


outlock = threading.Lock()

def workon(stripped_row):
    ssh = paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    ssh.connect(stripped_row, username=lanid, password=pwd)
    stdin, stdout, stderr = ssh.exec_command(cmd)
    #print stdout.read()
    stdin.flush()

    with open("output-" + stripped_row + ".txt", 'w+') as f:
        f.seek(0)
        f.write(stdout.read())

    with outlock:
        print stdout.readlines()
        #f.write(stdout)



def main():
    my_file = open('10host.txt')
    threads = []
    for h in my_file:
        striped_row = h.strip()
        t = threading.Thread(target=workon, args=(h,))
        t.start()
        threads.append(t)
    for t in threads:
        t.join()


main()

1 个答案:

答案 0 :(得分:0)

问题在于:

for h in my_file:
    striped_row = h.strip()
    t = threading.Thread(target=workon, args=(h,))

您正在剥离当前行,但随后将未剥离的行传递给您的工作函数。尝试将striped_row作为参数而不是h传递。