anatsuk1のウェブログ

ブログを書いてみたい!

標準入力が無い場合はブロッキングしたくない

pythonでコマンドを作成したい場合、標準入力があればそれを利用、なければそのほかの処理をしたい場合があると思います。
sys.stdin.readlines()で標準入力を読み込むとブロッキングしてしまいますが、それを回避する方法があれば解決します。
 解決方法としては、select.selectを使用します。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import sys
import select

if __name__ == "__main__":
rlist, wlist, xlist = select.select([sys.stdin],[],[],0)
if not rlist:
print "standard io is empty"
sys.exit()
lines = sys.stdin.readlines()
for line in lines:
print line.strip()
実行例
./pipe.py

結果
standard io is empty

実行例
ls ./pipe.py | ./pipe.py

結果
./pipe.py

参考: 湘南まぐろソフト » Blog Archive » pythonでstdinの入力検知