2. 超高レベルレイヤ

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

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

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

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

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

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

int PyRun_InteractiveLoop(FILE *fp, char *filename)
対話的デバイスに関連付けられたファイルからEOF に達するまで複数の文を 読み込み実行します。filenameNULLならば、"???"が代わりに 使われます。sys.ps1sys.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)
戻り値: 新たな参照.
辞書globalslocalsで指定されるコンテキストにおいて、 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_inputPy_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()と一緒に使います。 これは対話式のインタプリタループのための記号です。
ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。