1

私はPythonを初めて使用します。質問が奇妙に思えたら申し訳ありません。標準入力の各行をループして、変更された行をすぐに標準出力に返したいです。ほとんどの場合、機能するコードがあります。ただし、これを完全に機能させる方法はわかりません。

次のコードがあります

while True:
    line = sys.stdin.readline()

    if not line:
        break

    sys.stdout.write(line)

対話的に使用する場合、新しい行に EOF がある場合は終了しますが、Control-D を入力する前にテキストがある場合は、行を終了する前にコードを 2 回入力し、ループを終了する前にもう一度コードを入力する必要があります。 .

これを修正するにはどうすればよいですか。

4

2 に答える 2

3

ここからの私の答えはすぐにコピーできると思います:

それは^D本当に関係があります。現在の read(2)呼び出しを停止するだけです。

プログラムがそうし、その間にint rdbytes = read(fd, buffer, sizeof buffer); 押すと、バッファ内の現在読み取られているバイトが返され、その番号が返されます。回線の終端でも同じことが起こります。最後に常に配信されます。^Dread()\n

したがって^D、行の先頭または次の行の後にある aだけが、 EOF を通知する return^Dを持つという望ましい効果があります。read()0

もちろん、この動作は Python コードにも影響します。

于 2012-04-10T14:49:21.490 に答える
1

python docs で提案されている戦略は次のとおりです。

for line in sys.stdin:
    sys.stdout.write(line)

IO チュートリアルを参照してください。

于 2012-04-10T13:33:25.610 に答える