2010-03-06 6 views
4

Je veux exécuter un script python depuis un autre. En dedans je veux dire tout changement d'état du script enfant affecte l'état du parent. Donc, si une variable est définie dans l'enfant, elle est modifiée dans le parent.Python, appel dynamique du script

Normalement, vous pourriez faire quelque chose comme

import module 

Mais le problème est ici le script de l'enfant en cours d'exécution est un argument du script parent, je ne pense pas que vous pouvez utiliser l'importation avec une variable

Quelque chose comme ça

$python run.py child.py 

ce serait ce que je compterais arriver

#run.py 

#insert magic to run argv[1] 
print a 

#child.py 
a = 1 

$python run.py child.py 
1 

Répondre

8

Vous pouvez utiliser la fonction __import__ qui vous permet d'importer un module dynamique:

module = __import__(sys.argv[1]) 

(. Vous devrez peut-être retirer le .py arrière ou spécifiez pas sur la ligne de commande)

De la documentation Python:

L'utilisation directe de __import__() est rare, sauf dans les cas où vous souhaitez importer un module dont le nom est seulement connu à l'exécution.

+0

merci à greg. points bonus si vous pouvez montrer comment faire si le fichier python se trouve dans un autre répertoire que le script – Mike

+2

@Mike: bien sûr, modifier 'sys.path', peut-être comme ceci:' sys.path.append ("/ your/module/répertoire ")' –

1

Alors que __import__ exécute certainement le fichier spécifié, il le stocke également dans la liste des modules python. Si vous souhaitez réexécuter le même fichier, vous devez effectuer un rechargement.

Vous pouvez également jeter un oeil à la déclaration python exec qui pourrait être plus adapté à vos besoins.

De la documentation Python:

Cette déclaration prend en charge l'exécution dynamique du code Python. La première expression doit évaluer une chaîne, un objet fichier ouvert ou un objet code.

+0

Python 3: ['exec'] (https://docs.python.org/3/library/functions.html#exec) – WillC

Questions connexes