2013-08-08 10 views
0

J'essaye d'appeler un script python dans un autre script python. Les répertoires sont différents. J'ai essayéAppeler un script python dans un script python

import subprocess 
subprocess.call("C:\temp\hello2.py", shell=True) 

Mais je n'ai rien obtenu. Ça ne marche pas. J'ai passé en revue de nombreux forums, mais tous sont sur l'appel lorsque les deux scripts sont dans le même répertoire.

J'ai essayé d'avoir les deux scripts dans le même répertoire. Dans ce cas, je peux exécuter le modèle dans Python.exe (via la fenêtre cmd) mais pas dans IDLE. Dans IDLE, je ne reçois même pas un message d'erreur.

J'ai vraiment besoin de faire cela, de sorte que je ne peux pas définir l'autre script comme un module différent, etc. J'ai besoin d'appeler un script dans un autre script.

+1

Tout d'abord, utilisez une chaîne brute. –

+1

"n'a rien"? Pas même un message d'erreur? – geoffspear

Répondre

6

backslash Escape (\)

"C:\\temp\\hello2.py" 

ou utiliser la chaîne brute

r"C:\temp\hello2.py" 

>>> print "C:\temp\hello2.py" 
C:  emp\hello2.py 
>>> print "C:\\temp\\hello2.py" 
C:\temp\hello2.py 
>>> print r"C:\temp\hello2.py" 
C:\temp\hello2.py 
+0

Super! Merci beaucoup. –

1

D'abord la chose backslash, et la seconde vous devez toujours scripts python d'appel avec le interpréteur python. Vous ne savez pas qui sont les fichiers *.py associés à. Alors:

import sys 
import subprocess 
subprocess.call([sys.executable, 'C:\\temp\\hello2.py'], shell=True) 
+0

J'ai fait ces changements. Cela a bien fonctionné. Je vous remercie! –

+0

Bien que cela soit parfois approprié, ce n'est pas le cas si vous souhaitez appeler des modules python tiers qui attendent une version python différente. Le système enregistré python n'est pas nécessairement une mauvaise chose. – tdelaney

1

Je ne suis pas sûr de ce que vous entendez par « Je ne peux pas définir l'autre script comme un module différent, etc. Je dois appeler un script dans un autre script. », Mais je pense que vous peut éviter toute l'activité des sous-processus en important simplement votre autre script python, comme dans this answer.

à savoir

import imp 

hello2 = imp.load_source("hello2", 'C:\temp\hello2.py') 

Cela devrait exécuter votre script hello2.py - désolé si je suis mauvaise compréhension des contraintes de votre situation.

1

Je pense que nous pouvons opter pour une approche en modifiant la liste sys.path.

import sys 
sys.path.append("C:\\temp\\") 
import hello2 
Questions connexes