Home     |     .Net Programming    |     cSharp Home    |     Sql Server Home    |     Javascript / Client Side Development     |     Ajax Programming

Ruby on Rails Development     |     Perl Programming     |     C Programming Language     |     C++ Programming     |     IT Jobs

Python Programming Language     |     Laptop Suggestions?    |     TCL Scripting     |     Fortran Programming     |     Scheme Programming Language


 
 
Cervo Technologies
The Right Source to Outsource

MS Dynamics CRM 3.0

Python Programming Language

os.tmpfile() -> permission denied (Win XP)


Hi,

Here's what's happening:

Python 2.5 (r25:51908, Sep 19 2006, 09:52:17) [MSC v.1310 32 bit
(Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
| >>> import os
| >>> os.tmpfile()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
OSError: [Errno 13] Permission denied

but tempfile.mkstemp() works:

>>> import tempfile
>>> tempfile.mkstemp()

(3, 'c:\\docume~1\\sjm\\locals~1\\temp\\tmpnfuk9i')

This is Windows XP Pro SP2. The user with the problem is _not_ an
administrator. It works OK when logged on as an administrator. I am
using the mode which enables having multiple users logged on and
switching between them.

The problem happens with Pythons back to 2.2. Python 2.1 on Windows
doesn't seem to have a tmpfile() function in the os module.

On a Windows 2000 SP4 box, with a "Power User" [part way between
administrator and vanilla user] Python 2.3.5 os.tmpfile() works OK.
AFAICT Win XP doesn't have this intermediate level of user.

Questions:
1. Before I start checking what permissions who has to do what to
which, what directory is it likely to be trying to open the temp file
in? C:\WINDOWS\TEMP....?
2. What is the general advice about whether to use os.tmpfile() or the
functions in the tempfile module? I'm presuming that as os.tmpfile()
is ultimately calling tmpfile() in the C stdio library, nobody would
have gone to the effort of making the tempfile module just to
reproduce stdio functionality, but AFAICT there's no guidance in the
docs. Maybe I should be talking to the authors of the package that is
using os.tmpfile() :-)

TIA for any clues,
John

En Sun, 11 Feb 2007 01:57:52 -0300, John Machin <sjmac@lexicon.net>  
escribi:

> | >>> os.tmpfile()
> Traceback (most recent call last):
>   File "<stdin>", line 1, in <module>
> OSError: [Errno 13] Permission denied

> 1. Before I start checking what permissions who has to do what to
> which, what directory is it likely to be trying to open the temp file
> in? C:\WINDOWS\TEMP....?

You could analyze the source, but usually I find easier to use FILEMON:
http://www.sysinternals.com

--
Gabriel Genellina

On Feb 11, 4:15 pm, "Gabriel Genellina" <gagsl@yahoo.com.ar> wrote:

> En Sun, 11 Feb 2007 01:57:52 -0300, John Machin <sjmac@lexicon.net>
> escribi:

> > | >>> os.tmpfile()
> > Traceback (most recent call last):
> >   File "<stdin>", line 1, in <module>
> > OSError: [Errno 13] Permission denied

> > 1. Before I start checking what permissions who has to do what to
> > which, what directory is it likely to be trying to open the temp file
> > in? C:\WINDOWS\TEMP....?

> You could analyze the source,

I have already followed the twisty little passages: os.tmpfile() is
really nt.tempfile(), but there is no Modules/ntmodule.c (Modules/
posixmodule.c does a Jekyll & Hyde trick). (nt|posix)module calls
tmpfile(), which is (as I mentioned) in the C stdio library. How can I
analyse the source of that? Have Microsoft had a rush of blood to the
head and gone open source overnight??

> but usually I find easier to use FILEMON:http://www.sysinternals.com

Thanks, I'll try that.

Cheers,
John

On Feb 11, 4:33 pm, "John Machin" <sjmac@lexicon.net> wrote:

While Filemon is still alive, it's been superceded by Procmon, which
combines filemon + regmon + plus new goodies. I tried procmon.

And the result of an administrator user doing os.tmpfile():
281773  4:50:14.8607126 PM      python.exe      2716    CreateFile      C:\t2ks SUCCESS
Access: Generic Read/Write, Delete, Disposition: Create, Options:
Synchronous IO Non-Alert, Non-Directory File, Delete On Close,
Attributes: N, ShareMode: Read, Write, Delete, AllocationSize:
3,184,748,654,057,488,384
[big snip]

*** AARRGGHH It's creating the file in the *ROOT* directory ***

A quick google for "tmpfile root directory" reveals that this is a
"popular" problem on Windows. See e.g. http://bugs.mysql.com/bug.php?
id=3998 which has several users corroborating the story, plus this
handy hint:
"""
But MSDN says (ms-help://MS.MSDNQTR.2003APR.1033/vclib/html/
_crt_tmpfile.htm):
-------
The tmpfile function creates a temporary file and returns a pointer to
that stream. The temporary file is created in the root directory. To
create a temporary file in a directory other than the root, use tmpnam
or tempnam in conjunction with fopen.
"""

I wonder why my environment has entries for TMP and TEMP (both
pointing to the same path, and it sure ain't the root directory) --
must be one of those "haha fooled you" tricks :-(

Regards,
John

On 10 Feb 2007 20:57:52 -0800, "John Machin" <sjmac@lexicon.net>
declaimed the following in comp.lang.python:

> Hi,

> Here's what's happening:

> Python 2.5 (r25:51908, Sep 19 2006, 09:52:17) [MSC v.1310 32 bit
> (Intel)] on win32
> Type "help", "copyright", "credits" or "license" for more information.
> | >>> import os
> | >>> os.tmpfile()
> Traceback (most recent call last):
>   File "<stdin>", line 1, in <module>
> OSError: [Errno 13] Permission denied

PythonWin 2.4.3 (#69, Apr 11 2006, 15:32:42) [MSC v.1310 32 bit (Intel)]
on win32.
Portions Copyright 1994-2004 Mark Hammond (mhamm@skippinet.com.au) -
see 'Help/About PythonWin' for further copyright information.
>>> import os
>>> os.tmpfile()

<open file '<tmpfile>', mode 'w+b' at 0x011662A8>

> This is Windows XP Pro SP2. The user with the problem is _not_ an

        XP Pro, sp2, from my user account.

> On a Windows 2000 SP4 box, with a "Power User" [part way between
> administrator and vanilla user] Python 2.3.5 os.tmpfile() works OK.
> AFAICT Win XP doesn't have this intermediate level of user.

        It has them, but unless one is part of a Windows Domain network, the
control panel to /define a user/ at that level is not available.

        Now, can I remember where I found it last week... From an admin
account (or a command shell that was started as an admin using "run
as"), execute lusrmgr.msc

        Under "Groups", I show 11 categories. One of those is "Power User",
and I did add myself to that a week ago (I'd remove myself to test, but
that may require a log-off/log-on to reset the active account, and I'm
in the midst of a 7 hour video rendering -- applying both brightness and
unsharp masking to a 1-hour AVI takes time). However, given this
information, you should be able to set yourself up.

        XP HOME, I think, does not support the extra groups.
--
        Wulfraed        Dennis Lee Bieber               KD6MOG
        wlfr@ix.netcom.com              wulfr@bestiaria.com
                HTTP://wlfraed.home.netcom.com/
        (Bestiaria Support Staff:               web-a@bestiaria.com)
                HTTP://www.bestiaria.com/

Add to del.icio.us | Digg this | Stumble it | Powered by Megasolutions Inc