通过将git命令传递给python中的子进程来获取最后一个git提交日期

时间:2015-08-01 12:22:03

标签: python git subprocess gitpython

我有一个脚本,我只需要以最后一个git commit的2015-07-28格式检索日期。

但如果我获得git log -1 --pretty=format:"%ci",则在终端中使用Tue Jul 28 16:23:24 2015 +0530,那么如果我正在尝试

将此字符串传递给subprocess.Popen,如

subprocess.Popen('git log -1 --pretty=format:"%cd"' shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE))

但是这会抛出我的错误TypeError: %c requires int or char,我猜python的事情是我们将char传递给%c,而这是为了使用git命令获取日期。

我需要将此日期连接到我的python脚本的字符串。

2 个答案:

答案 0 :(得分:1)

代码遗失,,还有一个额外的)

proc = subprocess.Popen(
    'git log -1 --pretty=format:"%cd"',
    shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
output = proc.stdout.read()
proc.wait()

获取命令的输出后,您可以使用datetime.datetime.strptime将字符串转换为datetime对象,并使用datetime.datetime.strftime将其转换为您喜欢的格式:

import datetime
dt = datetime.datetime.strptime(output.rsplit(None, 1)[0], '%a %b %d %H:%M:%S %Y')
print(output)
print(dt.strftime('%Y-%m-%d'))

答案 1 :(得分:0)

错误消息与您的代码不符:相关代码会生成SyntaxError,而不是TypeError

您不需要shell=True。要获得git的输出,可以使用subprocess.check_output() function

from subprocess import check_output

date_string = check_output('git log -1 --pretty=format:"%ci"'.split()).decode()