How can I reverse the results of a shlex.split
? That is, how can I obtain a quoted string that would "resemble that of a Unix shell", given a list
of strings I wish quoted?
I've located a Python bug, and made corresponding feature requests here.
The shlex module defines the following functions: shlex. split (s, comments=False, posix=True) Split the string s using shell-like syntax. If comments is False (the default), the parsing of comments in the given string will be disabled (setting the commenters attribute of the shlex instance to the empty string).
shlex. quote() escapes the shell's parsing, but it does not escape the argument parser of the command you're calling, and some additional tool-specific escaping needs to be done manually, especially if your string starts with a dash ( - ).
We now (3.3) have a shlex.quote function. It’s none other that pipes.quote
moved and documented (code using pipes.quote
will still work). See http://bugs.python.org/issue9723 for the whole discussion.
subprocess.list2cmdline
is a private function that should not be used. It could however be moved to shlex
and made officially public. See also http://bugs.python.org/issue1724822.
How about using pipes.quote
?
import pipes strings = ["ls", "/etc/services", "file with spaces"] " ".join(pipes.quote(s) for s in strings) # "ls /etc/services 'file with spaces'"
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With