2016-03-27 8 views
1

Je voudrais exécuter cette fonction à partir d'un script au lieu de la ligne de commande. Par exemple, la fonction est:Comment puis-je appeler une fonction Python à partir d'un script qui devait s'exécuter en ligne de commande

def main(): 
    parser = argparse.ArgumentParser(description='Caffe prototxt to mxnet model parameter converter.\ 
        Note that only basic functions are implemented. You are welcomed to contribute to this file.') 
    parser.add_argument('caffe_prototxt', help='The prototxt file in Caffe format') 
    parser.add_argument('caffe_model', help='The binary model parameter file in Caffe format') 
    parser.add_argument('save_model_name', help='The name of the output model prefix') 
    args = parser.parse_args() 
    ... 

Comment puis-je l'exécuter comme ceci?

file.main('file_1.csv', 'file_2.csv', 'name') 

Et pourquoi quelqu'un écrirait une fonction que je ne peux exécuter qu'à partir de la ligne de commande? Il se sent gênant.

+0

Cette fonction est écrite car il est généralement mauvais d'écrire du code sous 'if name == '__main __''. – wRAR

+0

Salut @wRAR, avez-vous des références pour moi de lire pourquoi est-ce le cas? Merci beaucoup. – user2014905

+0

C'est simple, vous ne pouvez pas appeler du code écrit sous 'if name == '__main __'' aussi facilement que du code écrit dans une fonction séparée, quand vous avez besoin de l'appeler depuis un autre endroit. – wRAR

Répondre

3

Vous pouvez utiliser sys.argv:

import sys 

sys.argv.extend(['file_1.csv', 'file_2.csv', 'name']) 
file.main() 
0

Vous voulez sans doute faire un peu de lumière refactoring. Tirez le argparse stuff dans sa propre méthode qui appelle ensuite main(args), puis instancier votre propre argparse.Namespace() que vous passez dans main avec votre configuration.

Et oui, je suis d'accord que le code serait meilleur s'il était déjà factorisé de cette façon. Mais les gens codent pragmatiquement pour répondre à leurs besoins immédiats.