Pythonでは、_sys.stdin
_にデータがあるかどうかをどのように確認しますか?
os.isatty(0)
は、stdinがTTYデバイスに接続されているかどうかを確認できるだけでなく、利用可能なデータがあるかどうかも確認できます。
しかし、誰かが次のようなコードを使用する場合
_sys.stdin = cStringIO.StringIO("ddd")
_
そして、os.isatty(0)
を使用した後でも、Trueを返します。 stdinにデータがあるかどうかを確認するにはどうすればよいですか?
Unixシステムでは、次のことができます。
import sys
import select
if select.select([sys.stdin,],[],[],0.0)[0]:
print "Have data!"
else:
print "No data"
Windowsでは、選択モジュールはソケットでのみ使用できます。そのため、別のメカニズムを使用する必要があります。
私は使ってきました
if not sys.stdin.isatty()
以下に例を示します。
4 import sys
5
6 def main():
7 if not sys.stdin.isatty():
8 print "not sys.stdin.isatty"
9 else:
10 print "is sys.stdin.isatty"
>echo "asdf" | stdin.py
not sys.stdin.isatty
sys.stdin.isatty()は、stdinに何かがある場合にfalseを返します。
isatty(...)
isatty() -> true or false. True if the file is connected to a tty device.
ここでの目標に応じて:
import fileinput
for line in fileinput.input():
do_something(line)
役に立つこともあります。
(編集:これは、ここに統合された関連する質問に答えます。)
他の人が述べたように、データが標準入力から利用可能になるかどうかを確実に知る方法はありません。UNIXでは許可されていないためです(より一般的には、標準入力に接続するプログラムの将来の動作を推測できないためです)。
何もない(grep
などが行うこともある)場合でも、常にstdinを待つか、ユーザーに-
引数。