Python学習【365日チャレンジ!】268日目のマスターU(@Udemy11)です。
11月は10月に続いて、魚がよく釣れる季節なんですよね。
アジに太刀魚にアオリイカに青物。
それぞれの釣り方は別々なので、一緒に釣ることができないのが悩みどころで、いつもどれを釣りに行こうか悩んじゃうんです。
アジはポイントさえ外さなければポツポツと釣れますし、太刀魚は朝まずめには何匹かは釣ることができます。
アオリイカもここのところ調子がよくありませんが、周りの人はポツポツと上げていました。
青物だけはくじ引きみたいな感じで、なかなかあたりの日に巡り会わないんですよね。
そろそろあの強烈な引きを味わいたいんですけどね。
それでは、今日もPython学習を始めましょう。
昨日の復習
昨日は、例外処理をスマートに処理できるcontextlib.suppressを学習しました。
context.suppressは、with
ステートメントを使ってシンプルに例外処理を扱うことができましたが、例外自体を無視してしまうので、問題がないとわかっている例外限定で使用する必要がありました。
例外(=問題)を無視するのはあまりお勧めできませんから。
詳細については昨日の記事をごらんください。
今日は、値の受け渡しに関わるstdin
、stdout
、エラーのコントロールに関わるstderr
を学習します。
ストリーム
stdin
、stdout
、stderr
は入力を行うターミナルや出力結果を表示するディスプレイとプログラムを実行するプロセスをつなぐ入出力チャンネルで、標準ストリームと呼ばれています。
この標準ストリームはUNIXやUnix系OSであらかじめ用意されていて、データの入出力に常に関わっています。
システムに組み込まれているので、sys
をインポートして使うことができます。
stdin
stdin
は、データをプロセスに渡す際に利用されています。
次のコードの場合、コンソールでユーザーの入力を要求して、入力が完了すると、入力した値が出力されました。
x = input('Your name:')
print(x)
出力結果
Your name:MasterU ※エンターで入力を完了すると次の行が出力される
MasterU
この処理にはstdin
が使われているので、stdin
を使って入力した値を出力することもできます。
import sys
for line in sys.stdin:
print(line)
出力結果
MasterU ※エンターで入力を完了すると次の行が出力される
MasterU
for
ループを使ってstdin
の入力を待ってから、入力された値を出力しています。
これまでの入力もシステムの裏でstdin
が働いていたということですね。
stdout
次にstdout
ですが、上記のコードでもすでに使われているprint
出力で使われていますので、最初のコードを次のように変えても同じ結果が出力されます
import sys
x = input('Your name:')
sys.stdout.write(x)
出力結果
Your name:MasterU ※エンターで入力を完了すると次の行が出力される
MasterU
stdout
は値を保持しているだけなので、write
メソッドを使って入力された値を出力しています。
stderr
もう一つは、stderr
ですが、logging.error()
で値を出力するように、stderr.write
メソッドを使って受け取った値を出力することができます。
import logging
import sys
logging.error('Error')
sys.stderr.write('Error')
出力結果
Error
Error
stderr
は値を保持しているだけなので、write
メソッドを使って入力された値を出力しています。
受け取る値に文字列を入れていますが、stderr
は、発生したエラーの値を受け取ります。
まとめ
何気なく使用している入力と出力ですが、システムの裏ではstdin
、stdout
、stderr
といったストリームが活躍していたわけですね。
個人的にはあまり使うことはなくて、システムがこんな値を使って処理をしているということを理解しておく程度でいいのかなとおもっています。
実践で使う場面に出会わないと覚えられないので、そんなに真剣にならなくても大丈夫な気がしてきた今日この頃です。
少し気が緩みがちですが、明日もGood Python!