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

getting last git commit date via passing git command to subprocess in python

我有一个脚本,我只需要在其中检索最后一次 git 提交的 2015-07-28 格式的日期。

但是如果我得到 Tue Jul 28 16:23:24 2015 +0530 然后在终端中使用 git log -1 --pretty=format:"%ci" 然后如果我尝试

将此作为字符串传递给 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 我们正在将一个字符传递给 %c 而那是为了使用 git 命令获取日期。

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

代码少了,,多了一个):

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 to convert the string to datetime object, and convert it to the format you like using 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'))

错误消息与您的代码不符:有问题的代码会生成 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()