2010-12-06 34 views
6

veuillez nous en informer - cela peut-il être surmonté? Un processus enfant peut-il créer un sous-processus?sous-processus python utilisant le sous-processus d'importation

Le problème est, j'ai une application prête qui doit appeler le script python. Ce script sur son propre wroks parfaitement, mais doit appeler des scripts shell existants. Schématiquement le problème est dans le code suivant:

parent.py

import subprocess 
subprocess.call(['/usr/sfw/bin/python', '/usr/apps/openet/bmsystest/relAuto/variousSW/child.py','1', '2']) 

child.py

import sys 
import subprocess 
print sys.argv[0] 
print sys.argv[1] 

subprocess.call(['ls -l'], shell=True) 
exit 

Courir child.py

python child.py 1 2 
    all is ok 

Courir parent.py

python parent.py 
Traceback (most recent call last): 
    File "/usr/apps/openet/bmsystest/relAuto/variousSW/child.py", line 2, in ? 
    import subprocess 
ImportError: No module named subprocess 

Un grand merci apllom

+0

Ceci est sous Solaris 2.6.2 - avez-vous essayé ces exemples sur une plate-forme différente? – apllom

+0

Désolé - Solaris 10, python 2.6.2 a été construit à partir de la source – apllom

+0

Cela devrait fonctionner. Vois ma réponse.J'ai l'impression que vous utilisez deux exécutables python différents. – pyfunc

Répondre

1

There should be nothing stopping you from using subprocess in both child.py and parent.py

Je suis en mesure de fonctionner parfaitement bien. :)

Problème Debugging:

You are using python and /usr/sfw/bin/python .

  1. est python nu pointant vers le même python?
  2. Pouvez-vous vérifier en tapant «quel python»?

Je suis sûr que si vous avez fait ce qui suit, cela fonctionnera pour vous.

/usr/sfw/bin/python parent.py 

Sinon, pouvez-vous changer votre parent.py code à

import subprocess 
subprocess.call(['python', '/usr/apps/openet/bmsystest/relAuto/variousSW/child.py','1', '2']) 
+0

Je suppose que le problème est le chemin de recherche de module, par opposition au code lui-même. Donc oui, répondez à venir. :) – MrGomez

+0

oui, j'utilise le même python que python/usr/sfw/bin/python – apllom

+0

le même échec avec/usr/sfw/bin/python parent.py – apllom

0

subprocess.call n'est pas à l'aide de la bonne façon de le faire. À mon avis, subprocess.Popen serait mieux.

parent.py:

1 import subprocess 
2 
3 process = subprocess.Popen(['python', './child.py', 'arg1', 'arg2'],\ 
4   stdin=subprocess.PIPE, stdout=subprocess.PIPE,\ 
5   stderr=subprocess.PIPE) 
6 process.wait() 
7 print process.stdout.read() 

child.py

1 import subprocess 
2 import sys 
3 
4 print sys.argv[1:] 
5 
6 process = subprocess.Popen(['ls', '-a'], stdout = subprocess.PIPE) 
7 
8 process.wait() 
9 print process.stdout.read() 

Sur le programme:

python parent.py 
['arg1', 'arg2'] 
. 
.. 
chid.py 
child.py 
.child.py.swp 
parent.py 
.ropeproject 
0

Vous pouvez ajouter votre répertoire python à sys.path dans chield .py

import sys 
sys.path.append('../') 

Oui, c'est mauvais, mais ça peut vous aider.