From 630924f190a4c3088cc4d3f275390d23e9028ba8 Mon Sep 17 00:00:00 2001 From: Guido van Rossum Date: Fri, 25 Jul 1997 20:59:55 +0000 Subject: Use Py_NewInterpreter() and friends. Remove saving/restoring of std files. --- Demo/pysvr/pysvr.c | 38 ++++++++++++++++---------------------- 1 file changed, 16 insertions(+), 22 deletions(-) diff --git a/Demo/pysvr/pysvr.c b/Demo/pysvr/pysvr.c index 133b785..c70863f 100644 --- a/Demo/pysvr/pysvr.c +++ b/Demo/pysvr/pysvr.c @@ -192,13 +192,8 @@ static PyObject *the_builtins; static void init_python() { - if (the_interp) - return; - Py_Initialize(); /* Initialize the interpreter */ - the_builtins = PyEval_GetBuiltins(); /* Get __builtins__ */ PyEval_InitThreads(); /* Create and acquire the interpreter lock */ - the_tstate = PyEval_SaveThread(); /* Release lock & get thread state */ - the_interp = the_tstate->interpreter_state; /* Get interp state */ + PyEval_ReleaseLock(); /* Release the lock */ } static void * @@ -250,25 +245,25 @@ run_interpreter(FILE *input, FILE *output) { PyThreadState *tstate; PyObject *new_stdin, *new_stdout; - PyObject *old_stdin, *old_stdout, *old_stderr; - PyObject *globals; + PyObject *mainmod, *globals; char buffer[1000]; char *p, *q; int n, end; - tstate = PyThreadState_New(the_interp); - PyEval_AcquireThread(tstate); + PyEval_AcquireLock(); + tstate = Py_NewInterpreter(); + if (tstate == NULL) { + fprintf(output, "Sorry -- can't create an interpreter\n"); + return; + } - globals = PyDict_New(); - PyDict_SetItemString(globals, "__builtins__", the_builtins); + mainmod = PyImport_AddModule("__main__"); + globals = PyModule_GetDict(mainmod); + Py_INCREF(globals); new_stdin = PyFile_FromFile(input, "", "r", NULL); new_stdout = PyFile_FromFile(output, "", "w", NULL); - old_stdin = PySys_GetObject("stdin"); - old_stdout = PySys_GetObject("stdout"); - old_stderr = PySys_GetObject("stderr"); - for (n = 1; !PyErr_Occurred(); n++) { Py_BEGIN_ALLOW_THREADS fprintf(output, "%d> ", n); @@ -299,10 +294,6 @@ run_interpreter(FILE *input, FILE *output) if (end < 0) PyErr_Print(); - PySys_SetObject("stdin", old_stdin); - PySys_SetObject("stdout", old_stdout); - PySys_SetObject("stderr", old_stderr); - if (end) break; } @@ -311,8 +302,8 @@ run_interpreter(FILE *input, FILE *output) Py_XDECREF(new_stdin); Py_XDECREF(new_stdout); - PyEval_ReleaseThread(tstate); - PyThreadState_Delete(tstate); + Py_EndInterpreter(tstate); + PyEval_ReleaseLock(); fprintf(output, "Goodbye!\n"); } @@ -321,6 +312,9 @@ static int run_command(char *buffer, PyObject *globals) { PyObject *m, *d, *v; + fprintf(stderr, "run_command: %s", buffer); + if (strchr(buffer, '\n') == NULL) + fprintf(stderr, "\n"); v = PyRun_String(buffer, Py_single_input, globals, globals); if (v == NULL) { if (PyErr_Occurred() == PyExc_SystemExit) { -- cgit v0.12