communicate() returns a tuple (stdout, stderr).
Note that if you want to send data to the process’s stdin, you need to create the Popen object with stdin=PIPE. Similarly, to get anything other than None in the result tuple, you need to give stdout=PIPE and/or stderr=PIPE too.
En effet, merci! J'avoue avoir mal lu 
Donc toujours avec les exemples précédents:
show.py:
1 2 3 4 5 6 7 8 9 10 11 12 13
| from subprocess import Popen, PIPE
from os import waitpid, getcwd
from time import sleep
from os.path import join
print ("Lancement de la commande")
output = Popen([join(getcwd(), "test.sh")], shell=True, stdout=PIPE).communicate()[0]
print ("Attente") # Pour montrer que ce n'est pas la sortie standard
sleep(2.0)
print ("Sortie")
sleep(1.0)
print output |
test.sh:
1 2 3
|
#!/bin/bash
echo "some_text" | mail -s subject dest@free.fr -a From:me@free.f |
Modifiant:
output = Popen([join(getcwd(), "test.sh")], shell=True, stdout=PIPE).communicate()[0]
En: (oui avec stdin, ne sait-on jamais!)
output = Popen([join(getcwd(), "test.sh")], shell=True, stdin=PIPE, stdout=PIPE, stderr=PIPE).communicate()[0]
Puis en:
output = Popen([join(getcwd(), "test.sh")], shell=True, stdout=PIPE, stderr=PIPE).communicate()[0]
Sortie (dans les deux cas):
1 2 3 4
| UgO::Larva> python show.py
Lancement de la commande
Attente
Sortie |
Ca ne peut pas marcher...
Ne me demandez pas les autres possibilités (avec stderr, stdout et même stdin), je viens aussi de les tester et aucune ne donne le résultat voulu.
D'autres idées?
Partager