我需要转换包含单引号和双引号以及换行符的字符串,以便在系统调用中使用。请考虑以下输入字符串:
"""one'two\nthree"four"""
这应该转换为以下输出字符串:
"$'one\'two\nthree\"four'"
这样它就可以作为git
提交命令中的消息参数提交:
git commit --message=$'one\'two\nthree\"four'
带有前导$
和周围单引号'
的奇怪语法是bash手册页中引用(搜索QUOTING)部分中描述的bash结构。我尝试了很多python函数,包括str.replace
,re.sub
,json.dumps
,repr
和str.encode('unicode-escape')
。但没有一个产生了必要的转变。看来,在这种情况下,python对于它自己的好处来说太高级了。将非常感激地收到关于如何进行的建议。
系统调用本身将使用这样的代码(为了清楚起见省略try
块):
import subprocess
call = ["git", "commit", "--message", "'one\'two\nthree\"four'"]
cpi = subprocess.run(call)
我也可以使用一些描述的git库,但我还没有完成我的作业。
注意:上一个$
列表中最后一项中不必要的call
字符已被删除。
答案 0 :(得分:1)
目前您想要的命令是错误的,它不是有效的Python字符串,因为缺少右"
,它应该是:
"$'one\'two\nthree\"four'"
这可以通过简单的.format
调用轻松构建:
>>> "$'{}'".format("""one'two\nthree"four""") == "$'one\'two\nthree\"four'"
True