web-dev-qa-db-ja.com

sys.stdin.readlines()入力を終了する方法は?

これはばかげた質問かもしれませんが、答えが見つからないので質問しなければなりません。

インタラクティブpython私は私が得るメッセージを処理したい:

>>> message = sys.stdin.readlines()

すべて正常に動作しますが、入力を取得しないようにしてメッセージ変数に保存するにはどうすればよいですか? ctrl + cで停止するとプロセス全体が停止するため、どこにも保存する入力はありません。見つからない簡単な答えがあると思います...

25
Gandi

UNIXベースのシステムの場合:

こんにちは、あなたは録音することができます: Ctrld

Ctrld [〜#〜] eof [〜#〜] を送信して、標準入力(stdin)を閉じます。

例:

>>> import sys
>>> message = sys.stdin.readlines()
Hello
World
My
Name
Is
James
Bond
# <ctrl-d> EOF sent
>>> print message
['Hello\n', 'World\n', 'My\n', 'Name\n', 'Is\n', 'James\n', 'Bond\n']

Windowsの場合:

EOF Windowsで送信するには、 Ctrld 沿って Ctrlz

48
Sandro Munda

これは古い質問ですが、Windowsとさまざまなキーボードレイアウトに関する更新が必要です。

WindowsでCTRL + ZCTRL + D **も機能しない場合そして、あなたは何が起こっているのかさまよっています:

  • デフォルトの英語キーボードレイアウトを使用しているかどうかを確認してください
  • 異なるデフォルト以外のキーボードレイアウトがある場合は、言語バーでキーボード設定を英語に切り替えてから、変更後にctrl + zを押してみてください。
  • まだ混乱している場合は、画面を見てください。Ctrlキーを押しながらZキーを押すと、コマンドラインに何が表示されますか。どんなシンボルが見えますか? ctrl + zを押していたとき、これが表示されていました:^ Y、誤ってctrl + yを押したとき、この^ Zを見たとき、Enterキーを押して入力を受け取りましたEOF =送信されました。

これはやや奇妙で直観に反します。少し前にポリッシュ文字を含めるようにキーレイアウトを変更しましたが、すべての共通キーは変更されていません。キーボードを通常使用すると、zは引き続きzにマップされます。通常、キーボードでctrl + zは何も実行しないため、変更しないでください。 。しかし、cmdでは明らかに動作が異なります。ctrlとzの間にデフォルトのリンクを設定するには、デフォルトのレイアウトに切り替えるか、コントロールyを使用してEOFを送信する必要があります。

5
Pawel Miech

使用する CTRL-D

message = sys.stdin.readlines()
abc
def
<CTRL-D>

# message == ['abc\n', 'def\n']
4
eumiro

Windowsでは、CTRL + Zを実行してEnterキーを押すだけです。

3
Devendra Bhat