Je veux diriger la sortie de ps -ef
to python ligne par ligne).
Le script que j'utilise est le suivant (first.py) -
#! /usr/bin/python
import sys
for line in sys.argv:
print line
Malheureusement, la "ligne" est divisée en mots séparés par des espaces. Donc, par exemple, si je le fais
echo "days go by and still" | xargs first.py
la sortie que je reçois est
./first.py
days
go
by
and
still
Comment écrire le script de telle sorte que la sortie soit
./first.py
days go by and still
?
Je ne comprends pas très bien pourquoi vous voulez utiliser des arguments en ligne de commande au lieu de simplement lire à partir de entrée standard. Python a un idiome simple pour parcourir des lignes sur stdin:
import sys
for line in sys.stdin:
sys.stdout.write(line)
Mon exemple d'utilisation:
$ echo -e "first line\nsecond line" | python python_iterate_stdin.py
first line
second line
Votre exemple d'utilisation:
$ echo "days go by and still" | python python_iterate_stdin.py
days go by and still
Ce que vous voulez, c'est popen
, ce qui permet de lire directement le résultat d'une commande, comme vous lisiez un fichier:
import os
with os.popen('ps -ef') as pse:
for line in pse:
print line
# presumably parse line now
Notez que, si vous souhaitez une analyse plus complexe, vous devrez creuser dans la documentation de subprocess.Popen
.