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()Ȱì½ï¤Ë»È¤¤¤Þ¤¹¡£ ¤³¤ì¤ÏÂÐÏü°¤Î¥¤¥ó¥¿¥×¥ê¥¿¥ë¡¼¥×¤Î¤¿¤á¤Îµ­¹æ¤Ç¤¹¡£
¤´°Õ¸«¤ä¤´»ØÅ¦¤ò¤ª´ó¤»¤Ë¤Ê¤ê¤¿¤¤Êý¤Ï¡¢ ¤³¤Î¥É¥­¥å¥á¥ó¥È¤Ë¤Ä¤¤¤Æ... ¤ò¤´Í÷¤¯¤À¤µ¤¤¡£