shlex.split的反向操作是什么?

44 投票
6 回答
12197 浏览
提问于 2025-04-16 10:18

我该怎么做才能把 shlex.split 的结果反转过来呢?也就是说,给我一个我想要加引号的 list 字符串,怎么才能得到一个看起来像 Unix 命令行那样的引号字符串呢?

更新0

我发现了一个 Python 的 bug,并在 这里 提出了相应的功能请求。

6 个回答

13

在Python 3.8中,有一个叫做 shlex.join() 的功能。

20

你觉得用 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'"

.

30

在现在的版本(3.3)中,我们有了一个叫做 shlex.quote 的函数。这个函数其实就是把之前的 pipes.quote 移过来并且进行了文档说明(使用 pipes.quote 的代码依然可以正常工作)。想了解更多,可以查看 http://bugs.python.org/issue9723 上的讨论。

subprocess.list2cmdline 是一个不应该使用的私有函数。不过,它有可能会被移到 shlex 中,并正式公开。更多信息可以参考 http://bugs.python.org/issue1724822

撰写回答