Débogage d'un sous-processus.Popen appel

J'ai été en utilisant subprocess.Popen avec succès dans le passé, lors de l'emballage des binaires avec un script python pour le format des arguments /personnaliser etc...

L'élaboration d'un nième wrapper, j'ai fait comme d'habitude... mais rien ne se passe.

Voici le petit code:

print command
p = subprocess.Popen(command, shell = True)
result = p.communicate()[0]
print vars(p)
return result

Et voici le résultat:

/usr/bin/sh /tmp/run/launch.sh
{'_child_created': True, 'returncode': 0, 'stdout': None, 'stdin': None, 'pid': 21650, 'stderr': None, 'universal_newlines': False}

Comme vous pouvez le voir, le but est de créer un script shell configuration de tout ce dont j'ai besoin, et puis l'exécuter. Je préfère l'utilisation de python véritable code, mais malheureusement launch.sh appel de la 3e partie des scripts shell que je n'ai aucune envie d'essayer et de se répliquer (si j'ai insisté pour une api python pour plus d'un an maintenant).

Le problème est que:

  • le shell script n'est pas exécuté (il doit frayer processus de sortie et quelques petites choses)
  • pas de python exception est levée
  • il n'y a rien dans le p objet qui indique qu'une erreur s'est produite

J'ai essayé check_call sans succès non plus...

Je suis à une perte quant à ce que je dois faire, et serait très heureux si quelqu'un pouvait point de ma faute ou de me diriger vers la résolution...

EDIT:

  • Essayer de l'exécuter sur Linux (sh)
  • shell est nécessaire pour la substitution de variables dans les scripts invoquée

EDIT 2:

Suivantes badp suggestion, j'ai modifié le code et ajouté

subprocess.Popen('ps', shell = True).communicate()

Juste après p = ... ligne qui crée le processus, voici les résultats:

/usr/bin/sh /tmp/run/launch.sh
  PID TTY          TIME CMD
29978 pts/0    00:00:01 zsh
 1178 pts/0    00:00:01 python
 1180 pts/0    00:00:00 sh <defunct>
 1181 pts/0    00:00:00 ps
None

Apparemment, le processus est lancé (même si <defunct>) et il est aussi à noter que j'ai un petit problème en passant les paramètres...

Grâce.

Êtes-vous sûr que le script est en fait pas lancé? Vous pouvez le vérifier en essayant d'appeler stat sur /proc/child-pid-goes-here/ immédiatement après l'appel de Popen
Quelle est la valeur de la commande?
La valeur est imprimée au début de la sortie /usr/bin/sh /tmp/run/launch.sh
Pour le moment j'ai une solution simple: j'ai ajouté #!/usr/bin/sh au début de mon launch.sh fichier et de le substituer la commande pour /tmp/run/launch.sh. Les travaux de cette. Pourrait-il être que je ne devrais pas explicitement état sh ... si j'utilise également shell = True ?

OriginalL'auteur Matthieu M. | 2010-02-05