2009-09-07 7 views
17

La question est plutôt simple mais pas de réponse par la recherche. Comment puis-je déterminer dans un script python si ce script est importé en tant que module ou exécuté en tant que script? Y a-t-il une différence en python? Le problème est, que je veux évaluer les paramètres de ligne de commande seulement si exécuté en tant que script, mais pas si le module est seulement importé pour l'utiliser dans un autre script. (Je veux être capable d'utiliser un script à la fois comme bibliothèque et comme programme.) J'ai peur que la manière de vanille soit de construire la lib et un deuxième script qui l'utilise, mais j'aimerais avoir une deuxième option pour un petit outil/libs.comment puis-je déterminer si un script python est importé en tant que module ou exécuté en tant que script?

Répondre

29

de python docs:

Lorsque vous exécutez un module Python avec

python fibo.py

le code dans le module sera exécuté, comme si vous l'avez importé, mais avec le __name__ défini sur "__main__". Cela signifie qu'en ajoutant ce code à la fin de votre module:

if __name__ == '__main__': 
    # Running as a script 

vous pouvez rendre le fichier utilisable en tant que script, ainsi que d'un module importable, car le code qui parse la ligne de commande ne fonctionne que Si le module est exécuté en tant que fichier "principal"

+3

cela semble légèrement magique mais est en fait un idiome complètement standard. Vous serez aussi \ _ \ _ main \ _ \ _ si vous êtes un module appelé par 'python -m somemodule'. – bobince

Questions connexes