mkstemp on pre-2.3 Python

Nick Craig-Wood nick at craig-wood.com
Fri Nov 19 15:30:04 CET 2004


djw <donald.welch at hp.com> wrote:
>  Hi, c.l.p'ers-
> 
>  I working on some code that creates a temporary file on Linux. I found some
>  code that the BDFL posted previously on the newsgroup and adapted it for my
>  use. I can't get the "pre-2.3" code to work.
> 
> 
>  try:
>      make_temp_file = tempfile.mkstemp # 2.3+
>  except AttributeError: 
>      def make_temp_file( suffix='', prefix='', dir='', text=False ): #pre-2.3
>          path = tempfile.mktemp( suffix ) 
>          fd = os.open( path, os.O_WRONLY|os.O_CREAT|os.O_EXCL, 0700 )
>          os.unlink( path )
>          return ( os.fdopen( fd, 'w+b' ), path ) 
> 
> 
> 
>  Here's the error:
> 
>  File "utils.py", line 583, in make_temp_file
>      return ( os.fdopen( fd, 'w+b' ), path )
>  OSError: [Errno 22] Invalid argument
> 
>  Anybody have any ideas on what I am doing wrong?

Replace the os.O_WRONLY with os.O_RDWR and all will be fine

>>> import tempfile, os
>>> suffix=""
>>> path = tempfile.mktemp( suffix )
>>> fd = os.open( path, os.O_RDWR|os.O_CREAT|os.O_EXCL, 0700 )
>>> f = os.fdopen( fd, 'w+b' )
>>> f
<open file '<fdopen>', mode 'w+b' at 0xb7de7a60>
>>> print >>f, "Hello"
>>> f.seek(0)
>>> f.read()
'Hello\n'
>>> f.close()

-- 
Nick Craig-Wood <nick at craig-wood.com> -- http://www.craig-wood.com/nick



More information about the Python-list mailing list