That is true.
list2cmdline escapes partially, but on NT and Windows10, the "^" must
also be escaped, but is not. The "|" pipe symbol must also be escaped
by "^", as many others as well.

The effect was that passing a rexexp as parameter to a windows program
gave me strange effects, and I recognized that "^" was missing.

So I was asking for a coherent solution:
Escape things completely or omit "shell=True".

Yes, there is a list of chars to escape, and it is Windows version
dependent. I can provide it if it makes sense.

Cheers -- Chris


On 07.01.18 18:20, Guido van Rossum wrote:
> I assume you're talking about list2cmdline()? That seems to be used to
> construct a string that can be passed to `cmd /c "{}"` -- it gets
> substituted instead of the {}, i.e. surrounded by ". I honestly can't
> say I follow that code completely, but I see that it escapes double
> quotes. Why is there a need to escape other characters? Is there a
> definitive list of special characters somewhere?
> 
> On Sun, Jan 7, 2018 at 8:17 AM, Christian Tismer <tis...@stackless.com
> <mailto:tis...@stackless.com>> wrote:
> 
>     Hi Guys,
> 
>     yes I know there was a lengthy thread on python-dev in 2014
>     called "subprocess shell=True on Windows doesn't escape ^ character".
> 
>     But in the end, I still don't understand why subprocess does
>     escape the double quote when shell=True but not other special
>     characters like "^"?
> 
>     Yes I know that certain characters are escaped under certain
>     Windows versions and others are not. And it is not trivial to make
>     that work correctly in all cases. But I think if we support
>     some escaping at all, then we should also support all special
>     cases. Or what sense should an escape make if it works sometimes
>     and sometimes not?
> 
>     The user would have to know which cases work and which not. But
>     I thought we want to remove exactly that burden from him?
> 
>     -----
> 
>     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).
> 
>     So I thought that using shell=True was a good Thing on windows,
>     but actually it is the start of all evil.
>     Using regular commands like "git" works fine on Windows and Linux
>     without the shell=True parameter.
> 
>     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?
> 
>     Cheers - Chris
> 
>     --
>     Christian Tismer-Sperling    :^)   tis...@stackless.com
>     <mailto:tis...@stackless.com>
>     Software Consulting          :     http://www.stackless.com/
>     Karl-Liebknecht-Str <http://www.stackless.com/ Karl-Liebknecht-Str>.
>     121     :     https://github.com/PySide
>     14482 Potsdam                :     GPG key -> 0xFB7BEE0E
>     phone +49 173 24 18 776 <tel:%2B49%20173%2024%2018%20776>  fax +49
>     (30) 700143-0023 <tel:%2B49%20%2830%29%20700143-0023>
> 
> 
>     _______________________________________________
>     Python-Dev mailing list
>     Python-Dev@python.org <mailto:Python-Dev@python.org>
>     https://mail.python.org/mailman/listinfo/python-dev
>     <https://mail.python.org/mailman/listinfo/python-dev>
>     Unsubscribe:
>     https://mail.python.org/mailman/options/python-dev/guido%40python.org 
> <https://mail.python.org/mailman/options/python-dev/guido%40python.org>
> 
> 
> 
> 
> -- 
> --Guido van Rossum (python.org/~guido <http://python.org/~guido>)


-- 
Christian Tismer-Sperling    :^)   tis...@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

Attachment: signature.asc
Description: OpenPGP digital signature

_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
https://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com

Reply via email to