# 16. 付録

## 16.1. 対話モード

対話型の REPL は2種類あります。 クラシックな基本インタープリタは最低限の行制御機能を持つ全プラットフォームでサポートされています。

`curses` をサポートするWindowsまたはUnix系システムでは、新しい対話型シェルがデフォルトで使われます。これはカラー、複数行編集、履歴ブラウズ、ペーストモードをサポートします。 カラーを無効にするには、 色の制御 を参照してください。ファンクションキーは いくつかの追加機能を提供します。 `F1` は対話型ヘルプブラウザ `pydoc` に入ります。 `F2` は >>> や ... のプロンプトを出さずにコマンドライン履歴を見れます。 `F3` はペーストモードに入り、大きなコードブロックを簡単に貼り付けられるようになります。 `F3` を押して通常のプロンプトに戻ります。

新しい対話型シェルでは、 `exit` または `quit` と打ってシェルを終えます。これらのコマンドの後に呼び出し括弧を追加する必要はありません。

新しい対話型シェルを望まない場合は、環境変数 `PYTHON_BASIC_REPL` で無効にできます。

### 16.1.1. エラー処理

エラーが発生すると、インタープリタはエラーメッセージとスタックトレースを表示します。対話モードでは、それから元のプロンプトに戻ります; ファイルから実行した場合は、スタックトレースを表示してゼロ以外の終了ステータスで終了します（`try` 文の `except` 節で処理された例外は、ここでいうエラーにはあたりません。）一部のエラーは無条件に致命的であり、ゼロ以外の終了ステータスで終了します; これは内部の不整合やある種のメモリ不足の場合に適用されます。エラーメッセージは全て標準エラー出力に書き込まれます; これに対して、通常は実行した命令から出力される内容は標準出力に書き込まれます。

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

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

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

    #!/usr/bin/env python3

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

chmod コマンドを使えば、スクリプトに実行モードや実行権限を与えることができます。

    $ chmod +x myscript.py

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

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

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

このファイルは対話セッションのときだけ読み出されます。 Python がコマンドをスクリプトから読み出しているときや、 `/dev/tty` がコマンドの入力元として明示的に指定されている(この場合対話的セッションのように動作します) わけではない 場合にはこのファイルは読み出されません。ファイル内のコマンドは、対話的コマンドが実行される名前空間と同じ名前空間内で実行されます。このため、ファイル内で定義されていたり import されたオブジェクトは、そのまま対話セッション内で使うことができます。また、このファイル内で `sys.ps1` や `sys.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):
        with open(filename) as fobj:
            startup_file = fobj.read()
        exec(startup_file)

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

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

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

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

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

脚注

[1]

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