Peter Otten a écrit : > Steven D'Aprano wrote: > > >>On Sun, 19 Nov 2006 13:11:13 +0100, Imbaud Pierre wrote: >> >> >>>On suse 9.3, tempfile.NamedTemporaryFile() doesnt work as expected. >> >>[snip] >> >> >>>Symptom: the file does not always exist, after the call to >>>NamedTemporaryFile(). Or at least its not seen by the strings command, >>>or by os.path.exists. >>> >>>I guess the bug is pretty much os dependent, or even filesystem >>>dependent (Im on reiserfs). Maybe the os is buggy, maybe, somehow, the >>>python interface. Or did I miss something? >>>Shame, I didnt even try to check for a python bug tracker. >> >>I can verify this problem occurs on Fedora Core 5 too: >> >>import os >>import sys >>import tempfile >>import subprocess >>def test(n): >>chunk = ': +++ abcd +++' >>for i in xrange(n): >>tf = tempfile.NamedTemporaryFile() >>tfName = tf.name >>tf.seek(0) >>tf.write(str(i) + chunk) >> tf.flush() >>if not os.path.exists(tfName): >>print 'pre-check: %s not there' % tfName >>subprocess.Popen(['strings', tfName]) >>if not os.path.exists(tfName): >>print 'post-check: %s not there' % tfName >> >> >>And here is a typical run, with the boring bits removed for ease of >>reading: >> >> >>>>>test(30) >> >>0: +++ abcd +++ >>1: +++ abcd +++ >> [ more of the same ] >>14: +++ abcd +++ >>strings: '/tmp/tmpOALbx9': No such file >>16: +++ abcd +++ >>17: +++ abcd +++ >>18: +++ abcd +++ >> [ more of the same ] >>27: +++ abcd +++ >>strings: /tmp/tmpdc52Nz: No such file or directory >>29: +++ abcd +++ >> >> >>Curiouser and curiouser... not only does os.path.exist always report the >>temp file as existing (at least in my tests), even when strings can't find >>it, but strings returns different error messages. >> >>Is it possible this is a bug in strings? > > > What /you/ are seeing is not a bug, I think. Popen() is asynchronous, > therefore you may enter the second iteration -- which implicitly closes the > temporary file -- before strings actually tries to access it. Use call() > and everything should be fine. Thanks A LOT, works fine, I feel kind of silly; your diagnostic is pretty obvious, afterward... I felt uneasy not closing the Popen, but it worked, so why bother? Its so easy to make ugly code!
-- http://mail.python.org/mailman/listinfo/python-list