Author eryksun
Recipients bar.harel, bobjalex, eryksun, paul.moore, r.david.murray, steve.dower, tim.golden, zach.ware
Date 2015-10-05.20:43:30
SpamBayes Score -1.0
Marked as misclassified Yes
Message-id <1444077811.17.0.968407586856.issue24505@psf.upfronthosting.co.za>
In-reply-to
Content
My suggestion is only for 3.5 / 3.6, because Windows XP is no longer supported. Starting with Windows Vista, both cmd.exe and CreateProcess support this behavior. I realize that disabling searching the current director by default is going beyond what cmd.exe does, which is to require opting in via the environment variable. But Python can choose to follow the more-modern behavior of PowerShell as a precedent here. 

As Steve mentioned, technically a program isn't supposed to check for the environment variable, but instead call NeedCurrentDirectoryForExePath. This would require either adding a built-in function, e.g. to the _winapi module, or require ctypes:

    >>> kernel32.NeedCurrentDirectoryForExePathW('command')
    1
    >>> os.environ['NoDefaultCurrentDirectoryInExePath'] = '1'
    >>> kernel32.NeedCurrentDirectoryForExePathW('command')
    0

Note that it requires first normalizing the path to replace slashes with backslashes, which is unusual for the Windows API.

    >>> kernel32.NeedCurrentDirectoryForExePathW(r'.\command')
    1
    >>> kernel32.NeedCurrentDirectoryForExePathW('./command')
    0
History
Date User Action Args
2015-10-05 20:43:31eryksunsetrecipients: + eryksun, paul.moore, tim.golden, r.david.murray, zach.ware, steve.dower, bobjalex, bar.harel
2015-10-05 20:43:31eryksunsetmessageid: <1444077811.17.0.968407586856.issue24505@psf.upfronthosting.co.za>
2015-10-05 20:43:31eryksunlinkissue24505 messages
2015-10-05 20:43:30eryksuncreate