Windows: subprocess won't run different Python interpreter
eryk sun
eryksun at gmail.com
Fri Nov 11 06:24:14 EST 2016
On Fri, Nov 11, 2016 at 10:46 AM, Thorsten Kampe
<thorsten at thorstenkampe.de> wrote:
> * eryk sun (Fri, 11 Nov 2016 09:55:23 +0000)
>>
>> If it works like cmd.exe, then it does its own search using %Path%
>> and %PathExt%. For example:
>>
>> C:\>cmd /c "set "PATH=" & cmd"
>> 'cmd' is not recognized as an internal or external command,
>> operable program or batch file.
>>
>> But why should subprocess.Popen implement its own search like the
>> shell instead of relying on CreateProcess to search for the
>> executable? You'd have to come up with an argument to convince the
>> devs to change the behavior in 3.7.
>
> My goal is to verify that other shells/interpreters on Windows work
> the same way as Python when running an application or creating a sub-
> process. Cmd does not. What's else there? I have Bash here but that's
> a Cygwin executable. And Cygwin Python does not work like Windows
> Python.
>
> Any ideas?
PowerShell uses its own search:
C:\>powershell -c "$Env:Path=''; powershell"
powershell : The term 'powershell' is not recognized as the name of
a cmdlet, function, script file, or operable program. Check the
spelling of the name, or if a path was included, verify that the
path is correct and try again.
At line:1 char:15
+ $Env:Path=''; powershell
+ ~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (powershell:String) [],
CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
These shells implement their own search because they use %PathExt% to
broaden the search and then call ShellExecuteEx to be able to
execute/open files that CreateProcess cannot. The only file extension
that CreateProcess tries to append is .EXE.
Since subprocess.Popen doesn't call ShellExecuteEx, it would make no
sense for it to use a custom search that tries appending all of the
file extensions in %PathExt%. Thus the only case for Popen to
implement its own search is to avoid the implicit directories that
CreateProcess searches ahead of %Path%. But implicitly searching the
application directory and system directories ahead of %Path% is a
feature for Windows applications, and Python is primarily an
application development language on Windows -- not a system
administration language that takes the place of the shell.
More information about the Python-list
mailing list