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.