This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

Author mhammond
Recipients
Date 2001-09-23.04:45:08
SpamBayes Score
Marked as misclassified
Message-id
In-reply-to
Content
Logged In: YES 
user_id=14198

I think the SDK description Tim posted was clear that 
setenv does not modify the process environment.  To prove 
this, I wrote the test code at the end (and output past it).

It shows that using "::SetEnvironmentVariable()" will not 
have the value reflected in the CRTL (ie, getenv() will not 
see the new value)

However, using putenv() *does* reflect the value back to 
the Win32 API - so GetEnvironmentVariable *does* see the 
value set by putenv.

So I think Python is using the correct API, and can't fix 
the behaviour.

int main()
{
    static char buffer[128];
    char * val = getenv("FOO");
    printf("When starting, FOO=%s\n", val);
    SetEnvironmentVariable("FOO", "SetEnvironmentVariable");
    
    GetEnvironmentVariable("FOO", buffer, sizeof
(buffer)/sizeof(buffer[0]));
    val = buffer;
    printf("After set, GetEnvironmentVariable reports FOO=%
s\n", val);
    val = getenv("FOO");
    printf("After set, getenv reports FOO=%s\n", val);

    putenv("FOO=_putenv");
    
    GetEnvironmentVariable("FOO", buffer, sizeof
(buffer)/sizeof(buffer[0]));
    val = buffer;
    printf("After _putenv set, GetEnvironmentVariable 
reports FOO=%s\n", val);
    val = getenv("FOO");
    printf("After _putenv set, getenv reports FOO=%s\n", 
val);
    return 0;
}

Output:
When starting, FOO=(null)
After set, GetEnvironmentVariable reports 
FOO=SetEnvironmentVariable
After set, getenv reports FOO=(null)
After _putenv set, GetEnvironmentVariable reports 
FOO=_putenv
After _putenv set, getenv reports FOO=_putenv
History
Date User Action Args
2007-08-23 13:56:29adminlinkissue463506 messages
2007-08-23 13:56:29admincreate