python字符串格式

时间:2011-03-25 03:39:38

标签: python

喜:   我想执行一个git命令,在shell中它如下:

$ git log v2.6.38..v2.6.38-rc8 --pretty=format:%s%n%n

--pretty = format:%s%n%n表示只显示提交主题消息,每条消息被两个新行拆分。

现在,我想在python脚本中执行,并输入标签名称作为参数。

我想这样做:

git_cmd = "git log %(old_tag)s..%(new_tag)s --pretty=format:'%s%n%n'"
git_cmd = git_cmd % {'old_tag'='v2.6.38','new_tag'='v2.6.38-rc8'}
subprocess.Popen(shlex.split(git_cmd))

它出错了,因为%s%n%n现在被解释为字符串格式。

我该如何解决?

谢谢。

4 个答案:

答案 0 :(得分:2)

使用string formatting(如果您至少使用Python 2.6):

git_cmd = "git log {old_tag}..{new_tag} --pretty=format:'%s%n%n'"
git_cmd = git_cmd.format(old_tag='v2.6.38',new_tag='v2.6.38-rc8')

答案 1 :(得分:1)

您可以通过重复%两次来转义Python格式字符串。

例如:

git_cmd = "git log %(old_tag)s..%(new_tag)s --pretty=format:'%%s%%n%%n'"

答案 2 :(得分:0)

r之前添加字符串,如下所示:

r"git log %(old_tag)s..%(new_tag)s --pretty=format:'%s%n%n'"

请参阅string literals上的文档。

答案 3 :(得分:0)

看起来你只是缺少字典语法:

d = {'key': 'value', 'key2': 'value2'}

此处它适用于您的代码示例:

git_cmd = "git log %(old_tag)s..%(new_tag)s --pretty=format:'%s%n%n'"
git_cmd = git_cmd % {'old_tag':'v2.6.38','new_tag':'v2.6.38-rc8'}
subprocess.Popen(shlex.split(git_cmd))