ラベル Python の投稿を表示しています。 すべての投稿を表示
ラベル Python の投稿を表示しています。 すべての投稿を表示

2012/01/21

python read subprocess stdout line by line


proc = subprocess.Popen(['python','fake_utility.py'],stdout=subprocess.PIPE)
for line in iter(proc.stdout.readline,''):
    print line

でまわす.

for line in proc.stdout:

ではうまくいかない

参考:
http://stackoverflow.com/questions/2804543/read-subprocess-stdout-line-by-line


追記:

hoge.sh | python foo.py

みたいな形で,パイプからの入力を標準入力で受ける場合も同じ.
CSV形式で読むならこんな感じ

csvreader = csv.reader(iter(sys.stdin.readline, ''))
for data_vals in csvreader:
    print data_vals

参考:
http://stackoverflow.com/questions/6556078/how-to-read-a-csv-file-from-a-stream-and-process-each-line-as-it-is-written

2009/03/31

tagpyをインストール

環境は、Vine Linux 4.2 です。といっても、環境が関係あるのは configure のとこだけだと思います。

1. libboost, taglib をインストール
# apt-get install libboost libboost-devel libboost-python libboost-python-devel
# apt-get install taglib taglib-devel

2. tagpy をダウンロード
ここから.tagpy-0.94.5.tar.gz(2009年3月31日現在)
http://pypi.python.org/pypi/tagpy

3. コンパイル&インストール
# tar xvzf tagpy-0.94.5.tar.gz
# cd tagpy-0.94.5
# ./configure --taglib-inc-dir=/usr/include/taglib --boost-python-libname=boost_python-gcc33-mt (注:Vine は gcc3.3 なので)
# make
# make install

2009/01/21

Python Unbuffered

標準入力のバッファリングを無効にしてする方法。
普通だといいのだけど、Python の出力をパイプで他に渡したいときは便利。とくに、tee を使うときとか。

コマンドライン引数で

python -u

とするか

PYTHONUNBUFFERED=x python

とすればOk


参考ページ:http://yota.ro/blog/2007/01/python-unbuffered/