Commits

Oben Sonne committed e529749

Python 2/3 hack for the exec statement/function

See http://docs.python.org/release/3.0.1/whatsnew/3.0.html for changes
with regard to `exec`. The problem here is that we cannot use the
function syntax in Poole already for Python 2.x since we need a
qualified exec, and thus we need the `in` syntax which causes a syntax
error in Py3.

This workaround uses `execfile` in Py2 (which, as a function, does not
cause syntax errors in Py3) and the `exec` function from the builtins in
Py3.

References issue 8.

  • Participants
  • Parent commits f5a14f5

Comments (0)

Files changed (1)

     sys.exit(1)
 
 # =============================================================================
+# Python 2/3 hacks
+# =============================================================================
+
+PY3 = sys.version_info[0] == 3
+
+if PY3:
+    import builtins
+    exec_ = getattr(builtins, "exec")
+else:
+    import tempfile
+    def exec_(code, envdic):
+        with tempfile.NamedTemporaryFile() as tf:
+            tf.write(code)
+            tf.flush()
+            execfile(tf.name, envdic)
+
+# =============================================================================
 # init site
 # =============================================================================
 
         # execute
         sys.stdout = StringIO.StringIO()
         try:
-            exec stmt in macros.copy()
+            exec_(stmt, macros.copy())
         except:
             sys.stdout = sys.__stdout__
             abort_iex(page, "statements", stmt, traceback.format_exc())