2010-12-16 9 views
1

Est-ce que quelqu'un sait si j'ai un script one.py qui est écrit de la manière suivante:Python - exécuter un script externe

if __name__ == '__main__': 
    # Do something 

Et je veux appeler main fonction à partir d'un autre script. Comment devrais-je faire ça?

Je pense que ce serait quelque chose comme (disons que ceci est launcher.py)

# 'one' stands for import from `one.py` module 
import one 

if __name__ == '__main__': 
    one.main() 

Le seul problème est que je ne peux pas appeler main() cette façon.

Comment cela devrait-il être fait?

Répondre

1
with file('a.py','rU') as f: 
    co=compile(f.read(),'foobar','exec') 
    exec co in {'__name__':'__main__'} 
+4

Cela fonctionne, mais ce n'est pas le bon moyen de le faire. Le fait est que la fonction __name__ == '__main __' 'sentinel vérifie si votre programme est exécuté de manière autonome. Bien sûr, vous pouvez prétendre que c'est le cas, mais vous ne devriez pas - à la place, vous devriez appeler l'API qu'il vous expose! Autrement dit, vous appelez 'a.main()' de 'b'. – katrielalex

+1

En plus de ce que @katrielalex dit, cela semble être complexe et inutile à première vue. –

+0

Je suis avec Katrielalex et Felix, cela fait ce que requiered mais ce n'est certainement pas le chemin à parcourir. – slezica

8

Définir votre script comme:

def main(): 
    # Do something 

if __name__ == '__main__': 
    # Processing of possible input parameters here and passing to main 
    main() 

Ensuite, vous pouvez faire

# 'one' stands for import from `one.py` module 
import one 

if __name__ == '__main__': 
    one.main() 

Bien sûr, vous pouvez nommer la fonction comme vous le voulez.

Questions connexes