Added execfile().

This commit is contained in:
Guido van Rossum 1992-02-25 18:55:05 +00:00
parent 465c499544
commit 0f61f8a4bd
1 changed files with 37 additions and 0 deletions

View File

@ -186,6 +186,42 @@ builtin_exec(self, v)
return exec_eval(v, file_input); return exec_eval(v, file_input);
} }
static object *
builtin_execfile(self, v)
object *self;
object *v;
{
object *str = NULL, *globals = NULL, *locals = NULL, *w;
FILE* fp;
int n;
if (v != NULL) {
if (is_stringobject(v))
str = v;
else if (is_tupleobject(v) &&
((n = gettuplesize(v)) == 2 || n == 3)) {
str = gettupleitem(v, 0);
globals = gettupleitem(v, 1);
if (n == 3)
locals = gettupleitem(v, 2);
}
}
if (str == NULL || !is_stringobject(str) ||
globals != NULL && !is_dictobject(globals) ||
locals != NULL && !is_dictobject(locals)) {
err_setstr(TypeError,
"execfile arguments must be filename[,dict[,dict]]");
return NULL;
}
fp = fopen(getstringvalue(str), "r");
if (fp == NULL) {
err_setstr(IOError, "execfile cannot open the file argument");
return NULL;
}
w = run_file(fp, getstringvalue(str), file_input, globals, locals);
fclose(fp);
return w;
}
static object * static object *
builtin_float(self, v) builtin_float(self, v)
object *self; object *self;
@ -603,6 +639,7 @@ static struct methodlist builtin_methods[] = {
{"divmod", builtin_divmod}, {"divmod", builtin_divmod},
{"eval", builtin_eval}, {"eval", builtin_eval},
{"exec", builtin_exec}, {"exec", builtin_exec},
{"execfile", builtin_execfile},
{"float", builtin_float}, {"float", builtin_float},
{"getattr", builtin_getattr}, {"getattr", builtin_getattr},
{"hex", builtin_hex}, {"hex", builtin_hex},