2. Python インタプリタを使う

2.1. インタプリタを起動する

Python インタプリタは、それが使えるマシン上では通常 /usr/local/bin/python3.3 としてインストールされています; Unix シェルの検索パスに /usr/local/bin を入れることによって、次のコマンドをタイプしてインタプリタを開始することができます:

python3.3

[1] どのディレクトリに Python インタプリタをインストールするかはインストール時に選択できるので、インタプリタは他のディレクトリにあるかもしれません; 身近な Python に詳しい人か、システム管理者に聞いてみてください。 (例えば、その他の場所としては /usr/local/python が一般的です。)

Windows では、 Python は大抵の場合 C:\Python33 にインストールされますが、インストーラ実行時に変更することができます。このディレクトリをあなたのパスに追加するには、以下のコマンドをコマンドプロンプトで実行してください。

set path=%path%;C:\python33

ファイル終端文字 (Unixでは Control-D 、DOS や Windows では Control-Z) を一次プロンプト (訳注: ‘>>>’ のこと) に入力すると、インタプリタが終了ステータス 0 で終了します。もしこの操作がうまく働かないなら、コマンド: quit() と入力すればインタプリタを終了できます。

通常、インタプリタの行編集機能は、あまり洗練されたものではありません。 Unix では、インタプリタをインストールした誰かが GNU readline ライブラリのサポートを有効にしていれば、洗練された対話的行編集やヒストリ機能が利用できます。コマンドライン編集機能がサポートされているかを最も手っ取り早く調べる方法は、おそらく最初に表示された Python プロンプトに Control-P を入力してみることでしょう。ビープ音が鳴るなら、コマンドライン編集機能があります。編集キーについての解説は付録 対話入力編集とヒストリ置換 を参照してください。何も起こらないように見えるか、 ^P がエコーバックされるなら、コマンドライン編集機能は利用できません。この場合、現在編集中の行から文字を削除するにはバックスペースを使うしかありません。

インタプリタはさながら Unix シェルのように働きます。標準入力が端末に接続された状態で呼び出されると、コマンドを対話的に読み込んで実行します。ファイル名を引数にしたり、標準入力からファイルを入力すると、インタプリタはファイルから スクリプト を読み込んで実行します。

インタプリタを起動する第二の方法は python -c command [arg] ... です。この形式では、シェルの -c オプションと同じように、 command に指定した文を実行します。 Python 文には、スペースなどのシェルにとって特殊な意味をもつ文字がしばしば含まれるので、 command 全体をシングルクォート(訳注: ')で囲っておいたほうが良いでしょう。

Python のモジュールには、スクリプトとしても便利に使えるものがあります。 python -m module [arg] ... のようにすると、 module のソースファイルを、フルパスを指定して起動したかのように実行できます。

スクリプトファイルが使われた場合、スクリプトを走らせて、そのまま対話モードに入れると便利なことがあります。これには -i をスクリプトの前に追加します。

2.1.1. 引数の受け渡し

スクリプト名と引数を指定してインタプリタを起動した場合、スクリプト名やスクリプト名以後に指定した引数は、文字列のリストに変換されて sys モジュールの argv 変数に格納されます。 import sys することでこのリストにアクセスすることができます。 sys.argv には少なくとも一つ要素が入っています。スクリプト名も引数も指定しなければ sys.argv[0] は空の文字列になります。スクリプト名の代わりに '-' (標準入力を意味します) を指定すると、 sys.argv[0]'-' になります。 -c command を使うと、 sys.argv[0]'-c' になります。 -m module を使った場合、 sys.argv[0] はモジュールのフルパスになります。 -c command-m module の後ろにオプションを指定した場合、 Python インタプリタ自体はこれらの引数を処理せず、 sys.argv を介して commandmodule から扱えるようになります。

2.1.2. 対話モード

インタプリタが命令を端末 (tty) やコマンドプロンプトから読み取っている場合、インタプリタは 対話モード (interactive mode) で動作しているといいます。このモードでは、インタプリタは 一次プロンプト (primary prompt) を表示して、ユーザにコマンドを入力するよう促します。一次プロンプトは普通、三つの「大なり記号」 (>>>) です。一つの入力が次の行まで続く (行継続: continuation line を行う) 場合、インタプリタは 二次プロンプト (secondary prompt) を表示します。二次プロンプトは、デフォルトでは三つのドット (...) です。インタプリタは、最初のプロンプトを出す前にバージョン番号と著作権表示から始まる起動メッセージを出力します:

$ python3.3
Python 3.3 (default, Sep 24 2012, 09:25:04)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>

行継続は、例えば以下の if 文のように、複数の行からなる構文を入力するときに必要です:

>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print("Be careful not to fall off!")
...
Be careful not to fall off!

2.2. インタプリタとその環境

2.2.1. エラー処理

エラーが発生すると、インタプリタはエラーメッセージとスタックトレース (stack trace) を出力します。対話モードにいるときは、インタプリタは一次プロンプトに戻ります; スクリプトをファイルから実行しているときは、インタプリタはスタックトレースを出力した後、非ゼロの終了ステータスで終了します。 (try 文の except 節で処理された例外は、ここでいうエラーにはあたりません。) いくつかのエラーは常に致命的であり、非ゼロの終了ステータスとなるプログラムの終了を引き起こします。例えばインタプリタ内部の矛盾やある種のメモリ枯渇が当てはまります。エラーメッセージは全て標準エラー出力に書き込まれます; これに対して、通常は実行した命令から出力される内容は標準出力に書き込まれます。

割り込み文字 (interrupt character、普通は Control-C か DEL) を一次または二次プロンプトに対してタイプすると、入力が取り消されて一次プロンプトに戻ります。 [2] コマンドの実行中に割り込み文字をタイプすると KeyboardInterrupt 例外が送出されます。この例外は try 文で処理できます。

2.2.2. 実行可能な Python スクリプト

BSD 風の Unix システムでは、Python スクリプトはシェルスクリプトのように直接実行可能にできます。これを行うには、以下の行

#! /usr/bin/env python3.3

(ここではインタプリタがユーザの PATH 上にあると仮定しています) をスクリプトの先頭に置き、スクリプトファイルに実行可能モードを設定します。 #! はファイルの最初の2文字でなければなりません。プラットフォームによっては、この最初の行を終端する改行文字が Windows 形式 ('\r\n') ではなく、 Unix形式('\n')でなければならないことがあります。ハッシュまたはポンド文字、すなわち '#' は、Python ではコメントを書き始めるために使われていることに注意してください。

chmod コマンドを使えば、スクリプトに実行モード (または実行権) を与えることができます:

$ chmod +x myscript.py

Windows では、”実行モード” のような概念はありません。 Python のインストーラーは自動的に .py ファイルを python.exe に関連付けるので、 Python ファイルをダブルクリックするとそれをスクリプトとして実行します。 .pyw 拡張子も(訳注: pythonw.exe に)関連付けられ、通常コンソールウィンドウを抑制して実行します。

2.2.3. ソースコードの文字コード

デフォルトでは、 Python のソースコードは UTF-8 でエンコードされているものとして扱われます。 UTF-8 では、世界中のほとんどの言語の文字を同時に文字列リテラルや識別子やコメント中に書くことができます。 — ただし、標準ライブラリは識別子に ASCII 文字のみを利用していて、その他のポータブルなコードもその慣習に従うべきです。 それらの文字を正しく表示するためには、エディターはそのファイルが UTF-8 である事を識別して、そのファイルに含まれている文字を全てサポートしたフォントを使わなければなりません。

ソースファイルで扱う異なるエンコーディングを指定することもできます。そのためには、 #! 行の直後に、ソースファイルエンコーディングを定義する特殊なコメント行を置いてください:

# -*- coding: encoding -*-

このように宣言しておくと、ソースファイル中の全ては UTF-8 ではなく encoding という文字コードでエンコードされているものとして扱われます。実際に利用できるエンコードのリストは Python ライブラリリファレンスの codecs の節にあります。訳注: エンコーディング の部分には、実際には utf-8cp932 など、そのソースコードのエンコーディングを記述します。プログラムから日本語を扱う場合には、必ずある程度の文字コードの知識が必要になります。もし文字コードについてよく判らないのであれば、まずは英語だけ扱いながらチュートリアルを読み進めて、並行して文字コードについても勉強してみましょう。現在は、 Unicode の扱い易さの観点から、推奨される文字コードは utf-8 です。ただし、 utf-8 でソースを書いた場合、 utf-8 を表示できない Windows のコマンドプロンプトは print "こんにちは" を実行すると文字化けを起こすでしょう。その場合は、互換性のために古い cp932 エンコーディングを使うか、 print u"こんにちは" のように Unicode 文字列を使います。

例えば、エディターが UTF-8 でエンコードされたファイルをサポートせず他のエンコーディング、例えば Windows-1252 を利用しないといけない場合、次のように書くことができます:

# -*- coding: cp-1252 -*-

そして Windows-1252 文字集合中の文字をソースコード中に使うことができます。 この特殊なエンコーディングコメントはファイルの 1行目か2行目 に書く必要があります。

2.2.4. 対話モード用の起動時実行ファイル

Python を対話的に使うときには、インタプリタが起動する度に実行される何らかの標準的なコマンドがあると便利なことがよくあります。これを行うには、 PYTHONSTARTUP と呼ばれる環境変数を、インタプリタ起動時に実行されるコマンドが入ったファイル名に設定します。この機能は Unix シェルの .profile に似ています。

このファイルは対話セッションのときだけ読み出されます。 Python がコマンドをスクリプトから読み出しているときや、 /dev/tty がコマンドの入力元として明示的に指定されている(この場合対話的セッションのように動作します) わけではない 場合にはこのファイルは読み出されません。ファイル内のコマンドは、対話的コマンドが実行される名前空間と同じ名前空間内で実行されます。このため、ファイル内で定義されていたり import されたオブジェクトは、そのまま対話セッション内で使うことができます。また、このファイル内で sys.ps1sys.ps2 を変更して、プロンプトを変更することもできます。

もし現在のディレクトリから追加でスタートアップファイルを読み出したいのなら、グローバルのスタートアップファイルの中に if os.path.isfile('.pythonrc.py'): exec(open('.pythonrc.py').read()) のようなプログラムを書くことができます。スクリプト中でスタートアップファイルを使いたいのなら、以下のようにしてスクリプト中で明示的に実行しなければなりません:

import os
filename = os.environ.get('PYTHONSTARTUP')
if filename and os.path.isfile(filename):
    exec(open(filename).read())

2.2.5. カスタマイズ用モジュール

Python はユーザーが Python をカスタマイズするための2つのフック、 sitecustomizeusercustomize を提供しています。 これがどのように動作しているかを知るには、まずはユーザーの site-packages ディレクトリの場所を見つける必要があります。 Python を起動して次のコードを実行してください:

>>> import site
>>> site.getusersitepackages()
'/home/user/.local/lib/python3.2/site-packages'

usercustomize.py をそのディレクトリーに作成して、そこでやりたいことをすべて書くことができます。 このファイルは自動インポートを無効にする -s オプションを使わない限り、全ての Python の起動時に実行されます。

sitecustomize モジュールも同じように動作しますが、一般的にコンピューターの管理者によって、グローバルの site-packages ディレクトリに作成され、 usercustomize より先にインポートされます。 詳細は site モジュールのドキュメントを参照してください。

脚注

[1]

Unixでは、 Python 3.x インタープリタの実行ファイルはデフォルトでは python という名前ではインストールされません。 同時にインストールされた Python 2.x 実行ファイルと衝突させないためです。

[2]

GNU Readline パッケージに関する問題のせいで妨げられることがあります。