web-dev-qa-db-ja.com

Pythonでは、標準入力ストリーム(sys.stdin)の終わりを確認し、それに特別な何かを行う方法

私は次のようなことをしたいです:

for line in sys.stdin:
    do_something()
    if is **END OF StdIn**:
        do_something_special()

数回の試行の後、今のところ私はこれをやっています:

while True:
    try:
        line = sys.stdin.next()
        print line,
    except StopIteration:
        print 'EOF!'
        break

またはこれで:

while True:
    line = sys.stdin.readline()
    if not line:
        print 'EOF!'
        break
    print line,

上記の両方の方法は非常に似ていると思います。これを行うためのよりエレガントな(Pythonic)方法はありますか?


初期の失敗した試行:

私は最初にStopIterationループの内側または外側からforをキャッチしようとしましたが、StopIteration例外がbuild intoであるため、すぐに気付きましたforループ自体、次のコードスニペットは両方とも機能しませんでした。

try:
    for line in sys.stdin:
        print line,
except StopIteration:
    print 'EOF'

または

for line in sys.stdin:
    try:
        print line,
    except StopIteration:
        print 'EOF'
13
YaOzI
for line in sys.stdin:
    do_whatever()
# End of stream!
do_whatever_else()

とても簡単です。

Try/exceptを使用してください。 入力

EOFが読み取られると、EOFErrorが発生します。

while True:
    try:
        s=input("> ")
    except EOFError:
        print("EOF")
        break
8
KIM Taegyoon