J'utilise habituellement subprocess pour exécuter une commande externe. Pour votre cas, vous pouvez faire quelque chose comme ce qui suit
from subprocess import Popen, PIPE
p = Popen('ps -ef | grep rtptransmit | grep -v grep', shell=True,
stdout=PIPE, stderr=PIPE)
out, err = p.communicate()
La sortie sera en out variables.
commands est obsolète, vous ne devez pas l'utiliser. Utilisez subprocess à la place
import subprocess
a = subprocess.check_output('ps -ef | grep rtptransmit | grep -v grep', shell=True)
ps limite apparemment sa sortie pour tenir dans la largeur présumée du terminal. Vous pouvez remplacer cette largeur par le $COLUMNS variable d'environnement ou avec le --columns option à ps .
Le commands module est obsolète. Utilisez subprocess pour obtenir la sortie de ps -ef et filtrez la sortie en Python. Ne pas utiliser shell=True comme suggéré par d'autres réponses, c'est tout simplement superflu dans ce cas :
ps = subprocess.Popen(['ps', '-ef', '--columns', '1000'], stdout=subprocess.PIPE)
output = ps.communicate()[0]
for line in output.splitlines():
if 'rtptransmit' in line:
print(line)
Vous pouvez également jeter un œil au pgrep commande par laquelle vous pouvez rechercher directement des processus spécifiques.