この章の関数を使うとファイルまたはバッファにあるPythonソースコードを実行できますが、より詳細なやり取りをインタプリタとすることはできないでしょう。
これらの関数のいくつかは引数として文法の開始記号を受け取ります。使用できる開始記号は Py_eval_input と Py_file_input 、 Py_single_input です。開始期号の説明はこれらを引数として取る関数の後にあります。
これらの関数のいくつかが FILE* 引数をとることにも注意してください。注意深く扱う必要がある特別な問題の1つは、異なるCライブラリの FILE 構造体は異なっていて互換性がない可能性があるということです。実際に(少なくとも)Windowsでは、動的リンクされる拡張が異なるライブラリを使うことが可能であり、したがって、 FILE* 引数がPythonランタイムが使っているライブラリと同じライブラリによって作成されたことが確かならば、単にこれらの関数へ渡すだけということに注意すべきです。
標準インタプリタのためのメインプログラム。Pythonを組み込むプログラムのためにこれを利用できるようにしています。 argc と argv 引数をCプログラムの main() 関数へ渡されるものとまったく同じに作成すべきです。引数リストが変更される可能性があるという点に注意することは重要です。 (しかし、引数リストが指している文字列の内容は変更されません)。戻り値は sys.exit() 関数へ渡される整数でしょう。例外が原因でインタプリタが終了した場合は 1 、あるいは、引数リストが有効なPythonコマンドラインになっていない場合は 2 です。
Py_InspectFlag が設定されていない場合、未処理の SystemError 例外が発生すると、この関数は 1 を返すのではなくプロセスを exit することに気をつけてください。
下記の PyRun_AnyFileExFlags() の closeit を 0 に、 flags を NULL にして単純化したインタフェースです。
下記の PyRun_AnyFileExFlags() の closeit を 0 にして単純化したインタフェースです。
下記の PyRun_AnyFileExFlags() の flags を NULL にして単純化したインタフェースです。
fp が対話的デバイス(コンソールや端末入力あるいはUnix仮想端末)と関連づけられたファイルを参照しているならば、 PyRun_InteractiveLoop() の値を返します。それ以外の場合は、 PyRun_SimpleFile() の結果を返します。 filename が NULL ならば、この関数はファイル名として "???" を使います。
下記の PyRun_SimpleStringFlags() の PyCompilerFlags* を NULL にして単純化したインタフェースです。
__main__ モジュールの中で flags に従って command に含まれる Python ソースコードを実行します。 __main__ がまだ存在しない場合は作成されます。正常終了の場合は 0 を返し、また例外が発生した場合は -1 を返します。エラーがあっても、例外情報を得る方法はありません。 flags の意味については、後述します。
Py_InspectFlag が設定されていない場合、未処理の SystemError 例外が発生すると、この関数は 1 を返すのではなくプロセスを exit することに気をつけてください。
下記の PyRun_SimpleStringFileExFlags() の closeit を 0 に、 flags を NULL にして単純化したインタフェースです。
下記の PyRun_SimpleStringFileExFlags() の closeit を 0 にして単純化したインタフェースです。
下記の PyRun_SimpleStringFileExFlags() の flags を NULL にして単純化したインタフェースです。
Similar to PyRun_SimpleStringFlags(), but the Python source PyRun_SimpleString() と似ていますが、Pythonソースコードをメモリ内の文字列ではなく fp から読み込みます。 filename はそのファイルの名前でなければなりません。 closeit が真ならば、PyRun_SimpleFileExFlags は処理を戻す前にファイルを閉じます。
下記の PyRun_InteractiveOneFlags() の flags を NULL にして単純化したインタフェースです。
対話的デバイスに関連付けられたファイルから文を一つ読み込み、 flags に従って実行します。 filename が NULL ならば、 "???" が代わりに使われます。 sys.ps1 と sys.ps2 を使って、ユーザにプロンプトを提示します。入力が正常に実行されたときは 0 を返します。例外が発生した場合は -1 を返します。パースエラーの場合はPythonの一部として配布されている errcode.h インクルードファイルにあるエラーコードを返します。 (Python.h は errcode.h をインクルードしません。したがって、必要ならば特別にインクルードしなければならないことに注意してください。)
下記の PyRun_InteractiveLoopFlags() の flags を 0 にして単純化したインタフェースです。
対話的デバイスに関連付けられたファイルからEOF に達するまで複数の文を読み込み実行します。 filename が NULL ならば、 "???" が代わりに使われます。 sys.ps1 と sys.ps2 を使って、ユーザにプロンプトを提示します。EOFに達すると 0 を返します。
下記の PyRun_SimpleParseStringFlagsFilename() の filename を NULL に、 flags を 0 にして単純化したインタフェースです。
下記の PyRun_SimpleParseStringFlagsFilename() の filename を NULL にして単純化したインタフェースです。
開始トークン start を使って str に含まれる Python ソースコードを flags 引数に従ってパースします。効率的に評価可能なコードオブジェクトを作成するためにその結果を使うことができます。コード断片を何度も評価しなければならない場合に役に立ちます。
下記の PyRun_SimpleParseFileFlags() の flags を 0 にして単純化したインタフェースです。
PyParser_SimpleParseStringFlagsFilename() に似ていますが、 Pythonソースコードをメモリ内の文字列ではなく fp から読み込みます。 filename はそのファイルの名前でなけれななりません。
下記の PyRun_StringFlags() の flags を NULL にして単純化したインタフェースです。
辞書 globals と locals で指定されるコンテキストにおいて、 str に含まれるPythonソースコードをコンパイラフラグ flags のもとで実行します。パラメータ start はソースコードをパースするために使われるべき開始トークンを指定します。
コードを実行した結果をPythonオブジェクトとして返します。または、例外が発生したならば NULL を返します。
下記の PyRun_FileExFlags() の closeit を 0 にし、 flags を NULL にして単純化したインタフェースです。
下記の PyRun_FileExFlags() の flags を NULL にして単純化したインタフェースです。
下記の PyRun_FileExFlags() の closeit を 0 にして単純化したインタフェースです。
PyRun_String() と似ていますが、Pythonソースコードをメモリ内の文字列ではなく fp から読み込みます。 closeit を真にすると、 PyRun_FileExFlags() から処理を戻す前にファイルを閉じます。 filename はそのファイルの名前でなければなりません。
下記の Py_CompileStringFlags() の flags を NULL にして単純化したインタフェースです。
str 内のPythonソースコードをパースしてコンパイルし、作られたコードオブジェクトを返します。開始トークンは start によって与えられます。これはコンパイル可能なコードを制限するために使うことができ、 Py_eval_input 、 Py_file_input もしくは Py_single_input であるべきです。 filename で指定されるファイル名はコードオブジェクトを構築するために使われ、トレースバックあるいは SyntaxError 例外メッセージに出てくる可能性があります。コードがパースできなかったりコンパイルできなかったりした場合に、これは NULL を返します。
PyEval_EvalCodeEx() に対するシンプルなインタフェースで、コードオブジェクトと、グローバル・ローカル変数辞書だけを受け取ります。他の引数には NULL が渡されます。
与えられた特定の環境で、コンパイル済みのコードオブジェクトを評価します。環境はグローバルとローカルの辞書、引き数の配列、キーワードとデフォルト値、クロージャーのためのセルのタプルで構成されています。
実行フレームを評価します。これは PyEval_EvalFrameEx に対するシンプルなインタフェースで、後方互換性のためのものです。
Python のインタープリタの主要な、直接的な関数です。この関数には 2000 行ほどあります。実行フレーム f に関連付けられたコードオブジェクトを実行します。バイトコードを解釈して、必要に応じて呼び出しを実行します。追加の throwflag 引数はほとんど無視できます。 - もし true なら、すぐに例外を発生させます。これはジェネレータオブジェクトの throw() メソッドで利用されます。
現在の評価フレームのフラグを変更します。成功したら true を、失敗したら false を返します。
単独の式に対するPython文法の開始記号で、 Py_CompileString() と一緒に使います。
ファイルあるいは他のソースから読み込まれた文の並びに対するPython文法の開始記号で、 Py_CompileString() と一緒に使います。これは任意の長さのPythonソースコードをコンパイルするときに使う記号です。
単一の文に対するPython文法の開始記号で、 Py_CompileString() と一緒に使います。これは対話式のインタプリタループのための記号です。
コンパイラフラグを収めておくための構造体です。コードをコンパイルするだけの場合、この構造体が int flags として渡されます。コードを実行する場合には PyCompilerFlags *flags として渡されます。この場合、 from __future__ import は flags の内容を変更できます。
PyCompilerFlags *flags が NULL の場合、 cf_flags は 0 として扱われ、 from __future__ import による変更は無視されます。
struct PyCompilerFlags {
int cf_flags;
}