2015-12-22 1 views
0

J'ai un script qui va se connecter à une liste de noms d'hôtes, exécuter une commande et imprimer la sortie à l'écran. Je sais comment envoyer la sortie vers un fichier txt, mais je voudrais le configurer de manière à ce que la sortie de chaque hôte crée son propre fichier txt. Idéalement, j'aimerais que le fichier soit enregistré en tant que host1.txt, host2.txt, etc. Ouvrez-vous à d'autres idées s'il existe un moyen plus simple et plus intelligent d'y parvenir.Enregistrer la sortie dans plusieurs fichiers texte

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


cmd = "sh vl bri" 
lanid = raw_input("Enter your uname: ") 

#get password info 
def enterPassword(): 
    while True: # repeat forever 
    pwd = getpass.getpass('Enter password:') 
    password_again = getpass.getpass('Confirm password:') 
    if pwd != password_again: 
     print 'Password and confirmation do not match.Please try again!!' 
    else: 
     return pwd 
pwd = enterPassword() 

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 outlock: 
     print stdout.readlines() 

def main(): 
    hosts = ['host1', 'host2', 'host3', ] # 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() 

Répondre

0

Vous pouvez faire quelque chose comme:

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

au lieu de stdout d'impression sur la WorkOn fonction

+0

j'ai essayé, mais im obtenir des erreurs en retrait. Encore nouveau script si je suis sûr que son quelque chose de facile def WorkOn (hôte): ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy (paramiko.AutoAddPolicy()) ssh.connect (hôte, nom d'utilisateur = lanid, mot de passe = mdp) stdin, stdout, stderr = ssh.exec_command (cmd) #print stdout.read() \t \t avec open ("output-" + hôte, 'w') sous la forme f: \t \t f.write (stdout) stdin.flush() avec le déverrouillage: impression stdout.readlines() – JoeScripter

+0

apologies pour le formatage du commentaire précédent. J'essaie toujours de comprendre comment coller du code dans un commentaire. – JoeScripter