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, const char *filename)
下記の PyRun_AnyFileExFlags()closeit0 に、flagsNULLにして単純化したインタフェースです。

int PyRun_AnyFileFlags(FILE *fp, const char *filename, PyCompilerFlags *flags)
下記の PyRun_AnyFileExFlags()closeit0 にして単純化したインタフェースです。

int PyRun_AnyFileEx(FILE *fp, const char *filename, int closeit)
下記の PyRun_AnyFileExFlags()flagsNULLにして単純化したインタフェースです。

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

int PyRun_SimpleString(const char *command)
下記の PyRun_SimpleStringFlags()PyCompilerFlags*NULLにして単純化したインタフェースです。

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

int PyRun_SimpleFile(FILE *fp, const char *filename)
下記の PyRun_SimpleStringFileExFlags()closeit0 に、flagsNULLにして単純化したイ ンタフェースです。

int PyRun_SimpleFileFlags(FILE *fp, const char *filename, PyCompilerFlags *flags)
下記の PyRun_SimpleStringFileExFlags()closeit0 にして単純化したインタフェースです。

int PyRun_SimpleFileEx(FILE *fp, const char *filename, int closeit)
下記の PyRun_SimpleStringFileExFlags()flagsNULLにして単純化したイ ンタフェースです。

int PyRun_SimpleFileExFlags(FILE *fp, const char *filename, int closeit, PyCompilerFlags *flags)
Similar to PyRun_SimpleStringFlags(), but the Python source PyRun_SimpleString()と似ていますが、Pythonソースコードを メモリ内の文字列ではなくfpから読み込みます。 filenameはそのファイルの名前でなければなりません。 closeit が真ならば、PyRun_SimpleFileExFlags は処理を戻す前に ファイルを閉じます。

int PyRun_InteractiveOne(FILE *fp, const char *filename)
下記の PyRun_InteractiveOneFlags()flagsNULL にして単純化したインタフェースです。

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

int PyRun_InteractiveLoop(FILE *fp, const char *filename)
下記の PyRun_InteractiveLoopFlags()flags0 にして単純化したインタフェースです。

int PyRun_InteractiveLoopFlags(FILE *fp, const char *filename, PyCompilerFlags *flags)
対話的デバイスに関連付けられたファイルからEOF に達するまで複数の文を 読み込み実行します。filenameNULLならば、"???"が代わりに 使われます。sys.ps1sys.ps2を使って、ユーザにプロンプトを 提示します。EOFに達すると0を返します。

struct _node* PyParser_SimpleParseString(const char *str, int start)
下記の PyRun_SimpleParseStringFlagsFilename()filenameNULL に、flags0 にして単純化したイ ンタフェースです。

struct _node* PyParser_SimpleParseStringFlags( const char *str, int start, int flags)
下記の PyRun_SimpleParseStringFlagsFilename()filenameNULL にして単純化したインタフェースです。

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

struct _node* PyParser_SimpleParseFile(FILE *fp, const char *filename, int start)
下記の PyRun_SimpleParseFileFlags()flags0 にして単純化したインタフェースです。

struct _node* PyParser_SimpleParseFileFlags(FILE *fp, const char *filename, int start, int flags)
PyParser_SimpleParseStringFlagsFilename()に似ていますが、 Pythonソースコードをメモリ内の文字列ではなくfpから読み込みます。 filenameはそのファイルの名前でなけれななりません。

PyObject* PyRun_String(const char *str, int start, PyObject *globals, PyObject *locals)
戻り値: 新たな参照.
下記の PyRun_StringFlags()flagsNULLにして単 純化したインタフェースです。

PyObject* PyRun_StringFlags(const char *str, int start, PyObject *globals, PyObject *locals, PyCompilerFlags *flags)
辞書globalslocalsで指定されるコンテキストにおいて、 strに含まれるPythonソースコードをコンパイラフラグ flags の もとで実行します。 パラメータstartはソースコードをパースするために使われるべき 開始トークンを指定します。

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

PyObject* PyRun_File(FILE *fp, const char *filename, int start, PyObject *globals, PyObject *locals)
戻り値: 新たな参照.
下記の PyRun_FileExFlags()closeit0 にし、 flagsNULLにして単純化したインタフェースです。

PyObject* PyRun_FileEx(FILE *fp, const char *filename, int start, PyObject *globals, PyObject *locals, int closeit)
下記の PyRun_FileExFlags()flagsNULLにして単純化したインタフェースです。

PyObject* PyRun_FileFlags(FILE *fp, const char *filename, int start, PyObject *globals, PyObject *locals, PyCompilerFlags *flags)
下記の PyRun_FileExFlags()closeit0 にし て単純化したインタフェースです。

PyObject* PyRun_FileExFlags(FILE *fp, const char *filename, int start, PyObject *globals, PyObject *locals, int closeit, PyCompilerFlags *flags)
PyRun_String()と似ていますが、Pythonソースコードを メモリ内の文字列ではなくfpから読み込みます。 closeit を真にすると、PyRun_FileExFlags() から処理 を戻す前にファイルを閉じます。 filenameはそのファイルの名前でなければなりません。

PyObject* Py_CompileString(const char *str, const char *filename, int start)
戻り値: 新たな参照.
下記のPy_CompileStringFlags()flagsNULL に して単純化したインタフェースです。

PyObject* Py_CompileStringFlags(const char *str, const char *filename, int start, PyCompilerFlags *flags)
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()と一緒に使います。 これは対話式のインタプリタループのための記号です。

struct PyCompilerFlags
コンパイラフラグを収めておくための構造体です。コードをコンパイルする だけの場合、この構造体が int flags として渡されます。コードを実 行する場合にはPyCompilerFlags *flags として渡されます。この場合、 from __future__ importflags の内容を変更できます。

PyCompilerFlags *flagsNULLの場合、 cf_flags0 として扱われ、from __future__ import による変更は 無視されます。

struct PyCompilerFlags {
    int cf_flags;
}

int CO_FUTURE_DIVISION
このビットを flags にセットすると、除算演算子 /PEP 238 による 「真の除算 (true division)」 として扱われます。
ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。