]> granicus.if.org Git - python/commitdiff
runtest(): I don't know why we don't just use TESTFN, but if we have to
authorTim Peters <tim.peters@gmail.com>
Wed, 14 Aug 2002 01:05:57 +0000 (01:05 +0000)
committerTim Peters <tim.peters@gmail.com>
Wed, 14 Aug 2002 01:05:57 +0000 (01:05 +0000)
do bizarre things to get a temp file, I changed it to use mkstemp instead
of NamedTemporaryFile.  This tried to leave the file open while passing
its name to execfile().  On Win2K (but not Win9X), though, a file created
with O_TEMPORARY cannot be opened again, so the test failed with a
permission error when execfile tried to open it.  Closer to the truth:
a file created with O_TEMPORARY can be opened again, but only if the
file is also created with SHARE_DELETE access via the Win32 CreateFile()
function.  There's no way to get at that from MS's version of libc, though
(we'd have to ditch the "std" C file functions in favor of Win32 API
calls).

Lib/test/test_pkg.py

index 7dec2e95e620133695b68b940d08e0c30ad7f243..36ea95c6084b8430431fc50b06115b0a2e217e4d 100644 (file)
@@ -56,18 +56,19 @@ def runtest(hier, code):
     root = tempfile.mkdtemp()
     mkhier(root, hier)
     savepath = sys.path[:]
-    codefile = tempfile.NamedTemporaryFile()
-    codefile.write(code)
-    codefile.flush()
+    fd, fname = tempfile.mkstemp(binary=False)
+    os.write(fd, code)
+    os.close(fd)
     try:
         sys.path.insert(0, root)
         if verbose: print "sys.path =", sys.path
         try:
-            execfile(codefile.name, globals(), {})
+            execfile(fname, globals(), {})
         except:
             traceback.print_exc(file=sys.stdout)
     finally:
         sys.path[:] = savepath
+        os.unlink(fname)
         try:
             cleanout(root)
         except (os.error, IOError):