web-dev-qa-db-fra.com

Comment diriger l’entrée vers python ligne par ligne à partir du programme linux?

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

?

42
CodeBlue

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
91
Jan-Philip Gehrcke

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 .

5
Vincent Fourmond