Pythonの文字入出力のしくみ: print()がターミナルに文字を表示するまで

By Takayuki Shimizukawa

Elevator Pitch

Pythonで画面へ文字表示したり、キーボードから入力するときには、OSの標準入力, 標準出力が使われています。Pythonで標準入出力がどう使われているのか、どんな使い方があるのか、使う時の注意点はなにかを紹介します。 また、OSの標準入出力はPythonに限らず大多数のプログラムで使われていますが、そもそもこれは何なのか、低レイヤーの概念からPythonのレイヤーまでを通して、それぞれのレイヤーで入出力がどのように扱われているのか、各レイヤー間でどのようにつがっているのかを紹介します。

Description

Pythonで画面へ文字表示するには、 print() 関数を使います。また、キーボードから入力するときには、 input() 関数を使います。このとき、プログラムの内部ではOSが提供する [標準入力], [標準出力] が使われています。この[標準入出力]は、Pythonに限らず大多数のプログラムで使われていますが、普段はあまり意識する事がありません。Pythonを書くときは、 print() は画面に文字を出力、 input() はキーボードから入力、くらいの理解で十分ということがほとんどです。

しかし、標準入出力がどんなものなのかの概念を理解出来れば、様々な応用が出来るようになります。例えば、画面に出力するかファイルに出力するかをコマンドラインオプションで切り替えるプログラムなどが簡単に作れるようになります。あるいは、なにかのトラブルに遭遇したときに何が起きているのか、すばやく原因を把握できるようになります。

このトークでは、低レイヤーの概念からPythonのレイヤーまでを通して、それぞれのレイヤーで入出力がどのように扱われているのか、各レイヤー間でどのようにつがっているのかを紹介します。

アジェンダ

  1. Pythonの print(), input(), sys.stdout, sys.stdin の関係
  2. 標準入出力とファイル入出力の違い
  3. PythonとOSを繋ぐファイルディスクリプタ
  4. 標準入力と標準出力とは何か: ターミナル、シェル、Python
  5. トラブル: Pythonコマンドをリダイレクトしたら UnicodeEncodeError
  6. Pythonで外部コマンドを起動して標準入出力を操作するsubprocessパッケージ