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
?
標準入力から単に読み取るのではなく、コマンドライン引数を使用する理由がよくわかりません。 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
必要なのは popen
です。これにより、ファイルを読み取るのと同じようにコマンドの出力を直接読み取ることができます。
import os
with os.popen('ps -ef') as pse:
for line in pse:
print line
# presumably parse line now
より複雑な解析が必要な場合は、 subprocess.Popen
のドキュメントを詳しく調べる必要があることに注意してください。