2012-01-06 5 views
0

J'ai ce code iciformater la sortie - python

import subprocess 
from time import strftime  # Load just the strftime Module from Time 

f = open('check_'+strftime("%Y-%m-%d")+'.log', 'w') 
for server in open('check.txt'): 
    f.write(server.strip() + "\n") 
    subprocess.Popen(['plink', server.strip(), 'df','-k'],stdout=f) 

Ce que je voudrais avoir est la sortie il indique:

Nom du serveur

Sortie

Nom du serveur

Sortie

Actuellement, il montre:

nom du serveur

nom du serveur

sortie

sortie

Merci à l'avance

Répondre

2

Tout d'abord, si vous avez l'intention d'exécuter différentes commandes sur des serveurs distants, jetez un oeil à Fabric.

Par défaut, subprocess.Popen s'exécute en arrière-plan et votre commande est probablement beaucoup plus lente que les autres éléments de votre boucle (comme l'impression des noms de serveur). Essayez cela forcer à attendre pour chaque processus:

import subprocess 
from time import strftime  # Load just the strftime Module from Time 

f = open('check_'+strftime("%Y-%m-%d")+'.log', 'w') 
for server in open('check.txt'): 
    f.write(server.strip() + "\n") 
    p = subprocess.Popen(['plink', server.strip(), 'df','-k'],stdout=f) 
    p.wait() 
    f.flush() 

Si vous souhaitez pour faire fonctionner le processus en parallèle, je venais d'écrire chaque journal du serveur à un autre fichier. Puis concaténer le résultat si nécessaire.

+0

Excellent, merci beaucoup pour cela, il l'a résolu. J'ai changé les f.flush() et p.wait() pendant qu'il imprimait le serveur après la sortie. – geekcomputers

Questions connexes