web-dev-qa-db-ja.com

入力をpython linuxプログラムから1行ずつパイプする方法は?

ps -efの出力をpython行ごとにパイプします。

私が使用しているスクリプトはこれです(first.py)-

#! /usr/bin/python

import sys

for line in sys.argv:
   print line

残念ながら、「行」は空白で区切られた単語に分割されます。したがって、たとえば、

echo "days go by and still" | xargs first.py

私が得る出力は

./first.py
days
go
by
and
still

出力が次のようになるようにスクリプトを書く方法

./first.py
days go by and still

42
CodeBlue

標準入力から単に読み取るのではなく、コマンドライン引数を使用する理由がよくわかりません。 Pythonには、stdinの行を反復する単純なイディオムがあります。

import sys

for line in sys.stdin:
    sys.stdout.write(line)

私の使用例:

$ echo -e "first line\nsecond line" | python python_iterate_stdin.py 
first line
second line

あなたの使用例:

$ echo "days go by and still" | python python_iterate_stdin.py
days go by and still
91

必要なのは popen です。これにより、ファイルを読み取るのと同じようにコマンドの出力を直接読み取ることができます。

import os
with os.popen('ps -ef') as pse:
    for line in pse:
        print line
        # presumably parse line now

より複雑な解析が必要な場合は、 subprocess.Popen のドキュメントを詳しく調べる必要があることに注意してください。

5