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 パッケージに関する問題のせいで妨げられることがありま
    す。
