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()と一緒に使います。
これは対話式のインタプリタループのための記号です。
Release 2.3.5, documentation updated on 平成17年10月12日.
ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。