创建单独转义的单引号和双引号,其中还有换行符/ python

时间:2017-01-08 20:03:53

标签: python string bash python-3.x

我需要转换包含单引号和双引号以及换行符的字符串,以便在系统调用中使用。请考虑以下输入字符串:

"""one'two\nthree"four"""

这应该转换为以下输出字符串:

"$'one\'two\nthree\"four'"

这样它就可以作为git提交命令中的消息参数提交:

git commit --message=$'one\'two\nthree\"four'

带有前导$和周围单引号'的奇怪语法是bash手册页中引用(搜索QUOTING)部分中描述的bash结构。我尝试了很多python函数,包括str.replacere.subjson.dumpsreprstr.encode('unicode-escape')。但没有一个产生了必要的转变。看来,在这种情况下,python对于它自己的好处来说太高级了。将非常感激地收到关于如何进行的建议。

系统调用本身将使用这样的代码(为了清楚起见省略try块):

import subprocess
call = ["git", "commit", "--message", "'one\'two\nthree\"four'"]
cpi = subprocess.run(call)

我也可以使用一些描述的git库,但我还没有完成我的作业。

注意:上一个$列表中最后一项中不必要的call字符已被删除。

1 个答案:

答案 0 :(得分:1)

目前您想要的命令是错误的,它不是有效的Python字符串,因为缺少右",它应该是:

"$'one\'two\nthree\"four'"

这可以通过简单的.format调用轻松构建:

>>> "$'{}'".format("""one'two\nthree"four""") == "$'one\'two\nthree\"four'"
True