非常に高レベルのレイヤー—Pythonドキュメント

提供:Dev Guides
< PythonPython/docs/3.8/c-api/veryhigh
移動先:案内検索

非常に高レベルのレイヤー

この章の関数を使用すると、ファイルまたはバッファーで指定されたPythonソースコードを実行できますが、インタープリターとより詳細に対話することはできません。

これらの関数のいくつかは、パラメーターとして文法からの開始記号を受け入れます。 使用可能な開始記号は、Py_eval_inputPy_file_input、およびPy_single_inputです。 これらは、パラメータとして受け入れる関数に従って説明されています。

これらの関数のいくつかは FILE * パラメーターを受け取ることにも注意してください。 注意深く処理する必要がある特定の問題の1つは、異なるCライブラリのFILE構造が異なり、互換性がない可能性があることです。 Windowsでは(少なくとも)、動的にリンクされた拡張機能が実際に異なるライブラリを使用する可能性があるため、 FILE * パラメータは、これらの関数によって作成されたことが確実な場合にのみこれらの関数に渡されるように注意する必要があります。 Pythonランタイムが使用しているのと同じライブラリ。

int Py_Main(int argc, wchar_t **argv)

標準インタプリタのメインプログラム。 これは、Pythonを組み込んだプログラムで利用できるようになります。 argc および argv パラメーターは、Cプログラムのmain()関数に渡されるパラメーターとまったく同じように準備する必要があります(ユーザーのロケールに応じてwchar_tに変換されます)。 引数リストは変更される可能性があることに注意することが重要です(ただし、引数リストが指す文字列の内容は変更されません)。 戻り値は、インタープリターが正常に終了する場合(つまり、例外なし)は0、インタープリターが例外のために終了する場合は1、パラメーターリストの場合は2になります。有効なPythonコマンドラインを表していません。

他の方法で処理されない SystemExit が発生した場合、この関数は1を返しませんが、Py_InspectFlagが設定されていない限り、プロセスを終了します。

int Py_BytesMain(int argc, char **argv)

Py_Main()に似ていますが、 argv はバイト文字列の配列です。

バージョン3.8の新機能。

int PyRun_AnyFile(FILE *fp, const char *filename)
これは、以下の PyRun_AnyFileExFlags()への簡略化されたインターフェイスであり、 closeit0に設定され、 flagsNULLに設定されたままです。
int PyRun_AnyFileFlags(FILE *fp, const char *filename, PyCompilerFlags *flags)
これは、以下の PyRun_AnyFileExFlags()への簡略化されたインターフェイスであり、 closeit 引数は0に設定されたままです。
int PyRun_AnyFileEx(FILE *fp, const char *filename, int closeit)
これは、以下の PyRun_AnyFileExFlags()への簡略化されたインターフェイスであり、 flags 引数はNULLに設定されたままです。
int PyRun_AnyFileExFlags(FILE *fp, const char *filename, int closeit, PyCompilerFlags *flags)
fp が対話型デバイス(コンソールまたは端末入力またはUnix疑似端末)に関連付けられたファイルを参照している場合は、 PyRun_InteractiveLoop()の値を返します。それ以外の場合は、の結果を返します。 ] PyRun_SimpleFile()filename は、ファイルシステムエンコーディング( sys.getfilesystemencoding())からデコードされます。 ファイル名NULLの場合、この関数はファイル名として"???"を使用します。
int PyRun_SimpleString(const char *command)
これは、以下の PyRun_SimpleStringFlags()への簡略化されたインターフェイスであり、 PyCompilerFlags *引数はNULLに設定されたままです。
int PyRun_SimpleStringFlags(const char *command, PyCompilerFlags *flags)

flags 引数に従って、 __ main __ モジュールのコマンドからPythonソースコードを実行します。 __ main __ がまだ存在しない場合は、作成されます。 成功した場合は0を返し、例外が発生した場合は-1を返します。 エラーが発生した場合、例外情報を取得する方法はありません。 フラグの意味については、以下を参照してください。

他の方法で処理されない SystemExit が発生した場合、この関数は-1を返しませんが、Py_InspectFlagが設定されていない限り、プロセスを終了します。

int PyRun_SimpleFile(FILE *fp, const char *filename)
これは、以下の PyRun_SimpleFileExFlags()への簡略化されたインターフェイスであり、 closeit0に設定され、 flagsNULLに設定されたままです。
int PyRun_SimpleFileEx(FILE *fp, const char *filename, int closeit)
これは、以下の PyRun_SimpleFileExFlags()への簡略化されたインターフェイスであり、フラグNULLに設定されたままです。
int PyRun_SimpleFileExFlags(FILE *fp, const char *filename, int closeit, PyCompilerFlags *flags)

PyRun_SimpleStringFlags()に似ていますが、Pythonソースコードはメモリ内の文字列ではなく fp から読み取られます。 filename はファイルの名前である必要があり、ファイルシステムエンコーディング( sys.getfilesystemencoding())からデコードされます。 closeit がtrueの場合、PyRun_SimpleFileExFlagsが戻る前にファイルが閉じられます。

ノート

Windowsでは、 fp をバイナリモードとして開く必要があります(例: fopen(filename, "rb")。 そうしないと、PythonはLF行が正しく終了するスクリプトファイルを処理できない可能性があります。

int PyRun_InteractiveOne(FILE *fp, const char *filename)
これは、以下の PyRun_InteractiveOneFlags()への簡略化されたインターフェイスであり、フラグNULLに設定されたままです。
int PyRun_InteractiveOneFlags(FILE *fp, const char *filename, PyCompilerFlags *flags)

flags 引数に従って、対話型デバイスに関連付けられたファイルから単一のステートメントを読み取って実行します。 sys.ps1およびsys.ps2を使用してユーザーにプロンプトが表示されます。 filename は、ファイルシステムエンコーディング( sys.getfilesystemencoding())からデコードされます。

入力が正常に実行された場合は0を返し、例外があった場合は-1を返し、解析があった場合はerrcode.hインクルードファイルからのエラーコードを返します。エラー。 (errcode.hPython.hに含まれていないため、必要に応じて具体的に含める必要があります。)

int PyRun_InteractiveLoop(FILE *fp, const char *filename)
これは、以下の PyRun_InteractiveLoopFlags()への簡略化されたインターフェイスであり、フラグNULLに設定されたままです。
int PyRun_InteractiveLoopFlags(FILE *fp, const char *filename, PyCompilerFlags *flags)
EOFに達するまで、対話型デバイスに関連付けられたファイルからステートメントを読み取って実行します。 sys.ps1およびsys.ps2を使用してユーザーにプロンプトが表示されます。 filename は、ファイルシステムエンコーディング( sys.getfilesystemencoding())からデコードされます。 EOFで0を返すか、失敗すると負の数を返します。
int (*PyOS_InputHook)(void)
プロトタイプint func(void)で関数を指すように設定できます。 この関数は、Pythonのインタープリタープロンプトがアイドル状態になり、ターミナルからのユーザー入力を待つときに呼び出されます。 戻り値は無視されます。 このフックをオーバーライドすると、PythonソースコードのModules/_tkinter.cで行われているように、インタープリターのプロンプトを他のイベントループと統合するために使用できます。
char *(*PyOS_ReadlineFunctionPointer)(FILE*, FILE*, const char*)

プロトタイプchar *func(FILE *stdin, FILE *stdout, char *prompt)を使用して関数を指すように設定でき、インタープリターのプロンプトで1行の入力を読み取るために使用されるデフォルトの関数をオーバーライドします。 この関数は、NULLでない場合は文字列 prompt を出力し、提供された標準入力ファイルから入力行を読み取り、結果の文字列を返すことが期待されています。 たとえば、 readline モジュールは、このフックを設定して、行編集およびタブ補完機能を提供します。

結果は、 PyMem_RawMalloc()または PyMem_RawRealloc()、またはエラーが発生した場合はNULLによって割り当てられた文字列である必要があります。

バージョン3.4で変更:結果は、 PyMem_Malloc()ではなく、 PyMem_RawMalloc()または PyMem_RawRealloc()で割り当てる必要があります。 ]または PyMem_Realloc()

struct _node *PyParser_SimpleParseString(const char *str, int start)
これは、以下の PyParser_SimpleParseStringFlagsFilename()への簡略化されたインターフェイスであり、ファイル名NULLに設定され、フラグ0に設定されます。
struct _node *PyParser_SimpleParseStringFlags(const char *str, int start, int flags)
これは、以下の PyParser_SimpleParseStringFlagsFilename()への簡略化されたインターフェイスであり、ファイル名NULLに設定されたままです。
struct _node *PyParser_SimpleParseStringFlagsFilename(const char *str, const char *filename, int start, int flags)
flags 引数に従って、開始トークン start を使用して、 str からPythonソースコードを解析します。 その結果を使用して、効率的に評価できるコードオブジェクトを作成できます。 これは、コードフラグメントを何度も評価する必要がある場合に役立ちます。 filename は、ファイルシステムエンコーディング( sys.getfilesystemencoding())からデコードされます。
struct _node *PyParser_SimpleParseFile(FILE *fp, const char *filename, int start)
これは、以下の PyParser_SimpleParseFileFlags()への簡略化されたインターフェイスであり、フラグ0に設定されたままです。
struct _node *PyParser_SimpleParseFileFlags(FILE *fp, const char *filename, int start, int flags)
PyParser_SimpleParseStringFlagsFilename()に似ていますが、Pythonソースコードはメモリ内の文字列ではなく fp から読み取られます。
PyObject *PyRun_String(const char *str, int start, PyObject *globals, PyObject *locals)
これは、以下の PyRun_StringFlags()への簡略化されたインターフェイスであり、フラグNULLに設定されたままです。
PyObject *PyRun_StringFlags(const char *str, int start, PyObject *globals, PyObject *locals, PyCompilerFlags *flags)

オブジェクト globals および locals で指定されたコンテキストで、 flags で指定されたコンパイラフラグを使用して、 str からPythonソースコードを実行します。 globals は辞書である必要があります。 locals は、マッピングプロトコルを実装する任意のオブジェクトにすることができます。 パラメータ 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()への簡略化されたインターフェイスであり、フラグNULLに設定されたままです。
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_StringFlags()に似ていますが、Pythonソースコードはメモリ内の文字列ではなく fp から読み取られます。 filename はファイルの名前である必要があり、ファイルシステムエンコーディング( sys.getfilesystemencoding())からデコードされます。 closeit がtrueの場合、 PyRun_FileExFlags()が戻る前にファイルが閉じられます。
PyObject *Py_CompileString(const char *str, const char *filename, int start)
これは、以下の Py_CompileStringFlags()への簡略化されたインターフェイスであり、フラグNULLに設定されたままです。
PyObject *Py_CompileStringFlags(const char *str, const char *filename, int start, PyCompilerFlags *flags)
これは、 optimize-1に設定された、以下の Py_CompileStringExFlags()への簡略化されたインターフェースです。
PyObject *Py_CompileStringObject(const char *str, PyObject *filename, int start, PyCompilerFlags *flags, int optimize)

str のPythonソースコードを解析してコンパイルし、結果のコードオブジェクトを返します。 開始トークンは start で指定されます。 これは、コンパイル可能なコードを制約するために使用でき、Py_eval_inputPy_file_input、またはPy_single_inputである必要があります。 filename で指定されたファイル名は、コードオブジェクトの作成に使用され、トレースバックまたは SyntaxError 例外メッセージに表示される場合があります。 コードを解析またはコンパイルできない場合、これはNULLを返します。

整数 optimize は、コンパイラーの最適化レベルを指定します。 -1の値は、 -O オプションで指定されたインタープリターの最適化レベルを選択します。 明示的なレベルは、0(最適化なし、__debug__がtrue)、1(アサートが削除され、__debug__がfalse)、または2です。 (docstringも削除されます)。

バージョン3.4の新機能。

PyObject *Py_CompileStringExFlags(const char *str, const char *filename, int start, PyCompilerFlags *flags, int optimize)

Py_CompileStringObject()と同様ですが、 filename は、ファイルシステムエンコーディング( os.fsdecode())からデコードされたバイト文字列です。

バージョン3.2の新機能。

PyObject *PyEval_EvalCode(PyObject *co, PyObject *globals, PyObject *locals)
これは、 PyEval_EvalCodeEx()への簡略化されたインターフェイスであり、コードオブジェクトと、グローバル変数およびローカル変数のみが含まれます。 他の引数はNULLに設定されます。
PyObject *PyEval_EvalCodeEx(PyObject *co, PyObject *globals, PyObject *locals, PyObject *const *args, int argcount, PyObject *const *kws, int kwcount, PyObject *const *defs, int defcount, PyObject *kwdefs, PyObject *closure)
評価のための特定の環境を前提として、プリコンパイルされたコードオブジェクトを評価します。 この環境は、グローバル変数の辞書、ローカル変数のマッピングオブジェクト、引数の配列、キーワードとデフォルト、キーワードのみ引数のデフォルト値の辞書、およびセルのクロージャタプルで構成されます。
type PyFrameObject
フレームオブジェクトを記述するために使用されるオブジェクトのC構造体。 このタイプのフィールドは、いつでも変更される可能性があります。
PyObject *PyEval_EvalFrame(PyFrameObject *f)
実行フレームを評価します。 これは、下位互換性のために、 PyEval_EvalFrameEx()への簡略化されたインターフェイスです。
PyObject *PyEval_EvalFrameEx(PyFrameObject *f, int throwflag)

これは、Python解釈の主要な未塗装の関数です。 実行フレーム f に関連付けられたコードオブジェクトが実行され、バイトコードを解釈し、必要に応じて呼び出しを実行します。 追加の throwflag パラメーターは、ほとんど無視できます。trueの場合、例外がすぐにスローされます。 これは、ジェネレータオブジェクトの throw()メソッドに使用されます。

バージョン3.4で変更:この関数には、アクティブな例外をサイレントに破棄しないようにするためのデバッグアサーションが含まれるようになりました。

int PyEval_MergeCompilerFlags(PyCompilerFlags *cf)
この関数は、現在の評価フレームのフラグを変更し、成功した場合はtrueを返し、失敗した場合はfalseを返します。
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__ importフラグを変更できます。

PyCompilerFlags *flagsNULLの場合は常に、cf_flags0と等しいものとして扱われ、from __future__ importによる変更はすべて破棄されます。

int cf_flags

コンパイラフラグ。

int cf_feature_version

cf_feature_version はPythonのマイナーバージョンです。 PY_MINOR_VERSIONに初期化する必要があります。

このフィールドはデフォルトでは無視され、PyCF_ONLY_ASTフラグが cf_flags に設定されている場合にのみ使用されます。

バージョン3.8で変更: cf_feature_version フィールドが追加されました。

int CO_FUTURE_DIVISION
このビットをフラグに設定すると、除算演算子/ PEP 238 に従って「真の除算」として解釈されます。