喜: 我想执行一个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现在被解释为字符串格式。
我该如何解决?
谢谢。
答案 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))