[Python-ideas] [Python-Dev] subprocess not escaping "^" on Windows

Christian Tismer tismer at stackless.com
Sun Jan 7 14:32:32 EST 2018


Hi Chris,

On 07.01.18 18:18, Chris Angelico wrote:
> Redirecting this part of the conversation to python-ideas.
> 
> On Mon, Jan 8, 2018 at 3:17 AM, Christian Tismer <tismer at stackless.com> wrote:
>> As a side note: In most cases where shell=True is found, people
>> seem to need evaluation of the PATH variable. To my understanding,
>>
>>>>> from subprocess import call
>>>>> call(("ls",))
>>
>> works in Linux, but (with dir) not in Windows. But that is misleading
>> because "dir" is a builtin command but "ls" is not. The same holds for
>> "del" (Windows) and "rm" (Linux).
> 
> That's exactly what shell=True is for - if you want a shell feature,
> you use the shell. What exactly would emulate_shell do? Would it
> simply do a $PATH or %PATH% search, but otherwise function as
> shell=False? Would it process redirection? Would it handle
> interpolations? I think not, from your description:
> 
>> Perhaps it would be a good thing to emulate the builtin programs
>> in python by some shell=True replacement (emulate_shell=True?)
>> to match the normal user expectations without using the shell?
> 
> but it becomes difficult to draw the line. For instance, with
> emulate_shell=True, what would you do with all the sh/bash built-ins:
> 
> https://www.gnu.org/software/bash/manual/html_node/Bourne-Shell-Builtins.html
> https://www.gnu.org/software/bash/manual/html_node/Bash-Builtins.html
> 
> I'm thinking especially of the commands where bash has its own
> handling of something that could otherwise be found in $PATH, like
> pwd, time, and echo, but shells can do a lot of other things too.
> 
> When do you actually want to execute a shell built-in from Python but
> without using the shell itself? You give the example of ls/dir, but if
> that ever comes up in real-world code, I'd toss it out and recommend a
> cross-platform os.listdir or equivalent. There are plenty of times
> I've wanted a really quick way to redirect a standard stream from
> Python, but that isn't part of what you're recommending. Can you give
> a real-world example that would be improved by this?
> 
> I know this was just a side note in your original, but I'd like to
> hear more about what would make it useful.


No, I cannot. I just thought of a way to keep users from using
"shell=True". I *think* they do it after they experience that
"del" for instance is not found. They conclude "ah, I need the
shell", which is not true.

So whatever you come up with, the effect should be that people
no longer use the shell. THATs what I want, after bad experience with
non-escaped "^" in a regex, that caused some really weird result.

-- 
Christian Tismer-Sperling    :^)   tismer at stackless.com
Software Consulting          :     http://www.stackless.com/
Karl-Liebknecht-Str. 121     :     https://github.com/PySide
14482 Potsdam                :     GPG key -> 0xFB7BEE0E
phone +49 173 24 18 776  fax +49 (30) 700143-0023

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 496 bytes
Desc: OpenPGP digital signature
URL: <http://mail.python.org/pipermail/python-ideas/attachments/20180107/4200e3f4/attachment.sig>


More information about the Python-ideas mailing list