#
2. 超高レベルレイヤ

この章の関数を使うとファイルまたはバッファにあるPythonソースコードを 実行できますが、より詳細なやり取りをインタプリタとすることはできないでしょう。

これらの関数のいくつかは引数として文法の開始記号を受け取ります。 使用できる開始記号は`Py_eval_input`と`Py_file_input`、 `Py_single_input`です。開始期号の説明はこれらを引数として取る 関数の後にあります。

これらの関数のいくつかが`FILE*`引数をとることにも注意してください。 注意深く扱う必要がある特別な問題には、異なるCライブラリの`FILE`構造体は 異なっていて互換性がない可能性があるということが関係しています。 実際に(少なくとも)Windowsでは、動的リンクされる拡張が異なるライブラリを 使うことが可能であり、したがって、`FILE*`引数がPythonランタイムが 使っているライブラリと同じライブラリによって作成されたことが確かならば、 単にこれらの関数へ渡すだけということに注意すべきです。

int `Py_Main`( | int argc, char **argv)

  標準インタプリタのためのメインプログラム。Pythonを組み込む プログラムのためにこれを利用できるようにしています。 argcとargv引数をCプログラムの`main()`関数へ 渡されるものとまったく同じに作成すべきです。 引数リストが変更される可能性があるという点に注意することは重要です。 (しかし、引数リストが指している文字列の内容は変更されません)。 戻り値は`sys.exit()`関数へ渡される整数でしょう。 例外が原因でインタプリタが終了した場合は`1`、あるいは、 引数リストが有効なPythonコマンドラインになっていない場合は`2`です。

int `PyRun_AnyFile`( | FILE *fp, char *filename)

  fpが対話的デバイス(コンソールや端末入力あるいはUnix仮想端末)と 関連づけられたファイルを参照しているならば、 `PyRun_InteractiveLoop()`の値を返します。それ以外の場合は、 `PyRun_SimpleFile()`の結果を返します。filenameが `NULL`ならば、この関数はファイル名として`"???"`を使います。

int `PyRun_SimpleString`( | char *command)

  `__main__`モジュールの中でcommandに含まれるPythonソースコードを 実行します。`__main__`がまだ存在しない場合は作成されます。 正常終了の場合は`0`を返し、また例外が発生した場合は`-1`を 返します。エラーがあっても、例外情報を得る方法はありません。

int `PyRun_SimpleFile`( | FILE *fp, char *filename)

  `PyRun_SimpleString()`と似ていますが、Pythonソースコードを メモリ内の文字列ではなくfpから読み込みます。 filenameはそのファイルの名前でなければなりません。

int `PyRun_InteractiveOne`( | FILE *fp, char *filename)

  対話的デバイスに関連付けられたファイルから文を一つ読み込み実行します。 filenameが`NULL`ならば、`"???"`が代わりに使われます。 `sys.ps1`と`sys.ps2`を使って、ユーザにプロンプトを提示します。 入力が正常に実行されたときは`0`を返します。例外が発生した場合は `-1`を返すか、もしくはパースエラーの場合はPythonの一部として配布されている errcode.hインクルードファイルにあるエラーコードを返します。 (Python.hはerrcode.hをインクルードしません。したがって、 必要ならば特別にインクルードしなければならないことに注意してください。)

int `PyRun_InteractiveLoop`( | FILE *fp, char *filename)

  対話的デバイスに関連付けられたファイルからEOF に達するまで複数の文を 読み込み実行します。filenameが`NULL`ならば、`"???"`が代わりに 使われます。`sys.ps1`と`sys.ps2`を使って、ユーザにプロンプトを 提示します。EOFに達すると`0`を返します。

struct _node* `PyParser_SimpleParseString`( | char *str, int start)

  開始トークンstartを使ってstrに含まれるPythonソースコードをパースします。 効率的に評価可能なコードオブジェクトを作成するためにその結果を使うことができます。 コード断片を何度も評価しなければならない場合に役に立ちます。

struct _node* `PyParser_SimpleParseFile`( | FILE *fp, char *filename, int start)

  `PyParser_SimpleParseString()`に似ていますが、 Pythonソースコードをメモリ内の文字列ではなくfpから読み込みます。 filenameはそのファイルの名前でなけれななりません。

PyObject* `PyRun_String`( | char *str, int start, PyObject *globals, PyObject *locals)

  戻り値: 新たな参照.
  辞書globalsとlocalsで指定されるコンテキストにおいて、 strに含まれるPythonソースコードを実行します。 パラメータstartはソースコードをパースするために使われるべき 開始トークンを指定します。

  コードを実行した結果をPythonオブジェクトとして返します。または、 例外が発生したならば`NULL` を返します。

PyObject* `PyRun_File`( | FILE *fp, char *filename, int start, PyObject *globals, PyObject *locals)

  戻り値: 新たな参照.
  `PyRun_String()`と似ていますが、Pythonソースコードを メモリ内の文字列ではなくfpから読み込みます。 filenameはそのファイルの名前でなければなりません。

PyObject* `Py_CompileString`( | char *str, char *filename, int start)

  戻り値: 新たな参照.
  str内のPythonソースコードをパースしてコンパイルし、 作られたコードオブジェクトを返します。開始トークンは startによって与えられます。これはコンパイル可能なコードを 制限するために使うことができ、`Py_eval_input`、 `Py_file_input`もしくは`Py_single_input`であるべきです。 filenameで指定されるファイル名はコードオブジェクトを構築するために使われ、 トレースバックあるいは`SyntaxError`例外メッセージに出てくる可能性があります。 コードがパースできなかったりコンパイルできなかったりした場合に、 これは`NULL` を返します。

int `Py_eval_input`
  単独の式に対するPython文法の開始記号で、 `Py_CompileString()`と一緒に使います。

int `Py_file_input`
  ファイルあるいは他のソースから読み込まれた文の並びに対するPython文法の 開始記号で、`Py_CompileString()`と 一緒に使います。これは任意の長さのPythonソースコードをコンパイルするときに 使う記号です。

int `Py_single_input`
  単一の文に対するPython文法の開始記号で、 `Py_CompileString()`と一緒に使います。 これは対話式のインタプリタループのための記号です。