summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGeorg Brandl <georg@python.org>2007-03-07 00:40:28 (GMT)
committerGeorg Brandl <georg@python.org>2007-03-07 00:40:28 (GMT)
commitaa2321b0f8f8d51fe6aa1e8b9c81d989e642982d (patch)
treeda24f798ec16aa968cfa6fed0f3844eb7e81b0e8
parent49aafc9f2ce7d41be677cdefbcf0af6d9bd1e752 (diff)
downloadcpython-aa2321b0f8f8d51fe6aa1e8b9c81d989e642982d.zip
cpython-aa2321b0f8f8d51fe6aa1e8b9c81d989e642982d.tar.gz
cpython-aa2321b0f8f8d51fe6aa1e8b9c81d989e642982d.tar.bz2
Patch #703779: unset __file__ in __main__ after running a file. This
makes the filenames the warning module prints much more sensible when a PYTHONSTARTUP file is used.
-rw-r--r--Misc/NEWS4
-rw-r--r--Python/pythonrun.c14
2 files changed, 15 insertions, 3 deletions
diff --git a/Misc/NEWS b/Misc/NEWS
index a783add..bb02909 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -12,6 +12,10 @@ What's New in Python 2.6 alpha 1?
Core and builtins
-----------------
+- Patch #703779: unset __file__ in __main__ after running a file. This
+ makes the filenames the warning module prints much more sensible when
+ a PYTHONSTARTUP file is used.
+
- Variant of patch #697613: don't exit the interpreter on a SystemExit
exception if the -i command line option or PYTHONINSPECT environment
variable is given, but break into the interactive interpreter just like
diff --git a/Python/pythonrun.c b/Python/pythonrun.c
index aa7e624..454afe4 100644
--- a/Python/pythonrun.c
+++ b/Python/pythonrun.c
@@ -849,6 +849,7 @@ PyRun_SimpleFileExFlags(FILE *fp, const char *filename, int closeit,
{
PyObject *m, *d, *v;
const char *ext;
+ int set_file_name = 0, ret;
m = PyImport_AddModule("__main__");
if (m == NULL)
@@ -862,6 +863,7 @@ PyRun_SimpleFileExFlags(FILE *fp, const char *filename, int closeit,
Py_DECREF(f);
return -1;
}
+ set_file_name = 1;
Py_DECREF(f);
}
ext = filename + strlen(filename) - 4;
@@ -871,7 +873,8 @@ PyRun_SimpleFileExFlags(FILE *fp, const char *filename, int closeit,
fclose(fp);
if ((fp = fopen(filename, "rb")) == NULL) {
fprintf(stderr, "python: Can't reopen .pyc file\n");
- return -1;
+ ret = -1;
+ goto done;
}
/* Turn on optimization if a .pyo file is given */
if (strcmp(ext, ".pyo") == 0)
@@ -883,12 +886,17 @@ PyRun_SimpleFileExFlags(FILE *fp, const char *filename, int closeit,
}
if (v == NULL) {
PyErr_Print();
- return -1;
+ ret = -1;
+ goto done;
}
Py_DECREF(v);
if (Py_FlushLine())
PyErr_Clear();
- return 0;
+ ret = 0;
+ done:
+ if (set_file_name && PyDict_DelItemString(d, "__file__"))
+ PyErr_Clear();
+ return ret;
}
int