通过将 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()
我有一个脚本,我只需要在其中检索最后一次 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()