2017-09-15 5 views
0

J'ai écrit la fonction, il a seulement la fonctionnalité pour obtenir les détails d'Openstack en utilisant Openstack API. Je fais déjà la journalisation, cependant pour la vérification rapide de quelques réseaux je redirige la sortie du couple d'instruction d'impression dans un dossier. (ça ressemble à ça), et ça fonctionne bien.Rediriger Imprimer la sortie de déclaration dans un fichier si un argument de ligne de commande est fourni

def get_net_details(): 
    ... 
    filename = open('validation.txt', 'a') 
    network_name = network['name'] 
    print >> filename, 'Network Name : {0}'.format(network_name) 
    network_id = subnet_detail['subnet']['network_id'] 
    print >> filename, 'Network ID : {0}'.format(network_id) 
    network_type = network['provider:network_type'] 
    print >> filename, 'Network Type : {0}'.format(network_type) 
    print >> "=========================================" 
    filename.close() 

Le problème est, je veux connecter la sortie de la déclaration d'impression au fichier uniquement si l'utilisateur fournit une entrée de ligne de commande (tout commutateur via argparse ou tout autre moyen) au moment de l'exécution du script.

toute aide sera appréciée ..!

+1

Vérifiez la longueur de sys.argv et, si l'entrée est fournie, faites votre redirection. – Deepaklal

+0

Vous pouvez également essayer le module getopt, qui permet de gérer les arguments de la ligne de commande – Deepaklal

Répondre

1

d'abord récrire votre fonction pour qu'il prenne un flux en entrée:

def get_net_details(outstream): 
    ... 
    network_name = network['name'] 
    print >> outstream, 'Network Name : {0}'.format(network_name) 
    network_id = subnet_detail['subnet']['network_id'] 
    print >> outstream, 'Network ID : {0}'.format(network_id) 
    network_type = network['provider:network_type'] 
    print >> outstream, 'Network Type : {0}'.format(network_type) 
    print >> outream, "=========================================" 

Alors, que l'appelant soit passer un fichier ouvert ou sys.stdout - en fonction des drapeaux de ligne de commande - comme param.

def main(...): 
    # argparse stuff here 

    if someflag: 
     outstream = open(path/to/file, "w") 
    else: 
     outstream = sys.stdout 
    try: 
     get_net_details(outstream) 
    finally: 
     if someflag: 
      outstream.close()