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


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

The Python interpreter is usually installed as
"/usr/local/bin/python3.11" on those machines where it is available;
putting "/usr/local/bin" in your Unix shell's search path makes it
possible to start it by typing the command:

   python3.11

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

On Windows machines where you have installed Python from the Microsoft
Store, the "python3.11" command will be available. If you have the
py.exe launcher installed, you can use the "py" command. See 補足: 環
境変数の設定 for other ways to launch Python.

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

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

インタプリタは Unix シェルと同じように使えます。標準入力が端末に接続さ
れた状態では、コマンドを対話的に読み込んで実行します。ファイル名を引数
に指定するか、"python3 < filename" のように標準入力ファイルとして指定
すると、インタプリタはファイルから *スクリプト* を読み込んで実行します
。

インタプリタを "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]" はモジュールのフルパスになります。 Python インタープリタ
は、"-c" *command* や "-m" *module* の後ろに指定したオプションは無視し
ます。無視された引数は、"sys.argv" を使って *command* や *module* から
参照できます。


2.1.2. 対話モード
-----------------

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

   $ python3.11
   Python 3.11 (default, April 4 2021, 09:25:04)
   [GCC 10.2.0] on linux
   Type "help", "copyright", "credits" or "license" for more information.
   >>>

継続行は、複数行の構文を入力するときに使います。例えば、 "if" 文は継続
行を使用します

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

対話モードについての詳細は 対話モード を参照してください。


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


2.2.1. ソースコードの文字コード
-------------------------------

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

デフォルトエンコーディング以外のエンコーディングを使用するには、ファイ
ルの *先頭* の行に特別なコメントを追加しなければなりません。書式は以下
の通りです:

   # -*- coding: encoding -*-

*encoding* には、Python が "codecs" でサポートしている有効なエンコーデ
ィングを指定します。

例えば、Windows-1252 エンコーディングを使用するには、ソースコードファ
イルの先頭行は下記のようにします:

   # -*- coding: cp1252 -*-

ソースコードが UNIX "shebang" 行 で始まる場合には、*先頭行* のルールは
当てはまりません。 この場合には、エンコーディングの宣言はファイルの2行
目に追加します。 例えば以下のようになります:

   #!/usr/bin/env python3
   # -*- coding: cp1252 -*-

-[ 脚注 ]-

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