Python subprocess.Popen 使用 git 寻呼机

Python subprocess.Popen to use git pager

我被困在无法通过 core.pager.[=15= 获取 "git show" 到 运行 的 python 子进程调用的地步]

在我的 ~/.gitconfig 中我指定了一个核心寻呼机;

[core]
    pager = cat -vet

当我 运行 通过子流程(Popen 或 check_output)

cmd = ['git', '-C', repo, 'show', r'{0}:{1}'.format(commit, filename)]
stdout = subprocess.check_output(cmd)

我得到的输出没有 运行 通过猫寻呼机(行将以 '$' 结尾)

当我自己从 cli 运行 时,输出会通过寻呼机。 我应该如何调用子进程以通过 core.pager 将 "git show" 命令发送到 运行?

AFAIK,仅 git post- 当输出被定向到终端时,通过配置的寻呼机处理输出。由于您使用的是 subprocess.check_output,因此 git 命令的输出被重定向到管道(以允许将其提供给 Python 调用者)。因此 core.pager 不会被调用。

如果您想获得 post 处理后的输出,您将不得不 手动完成

假设您想使用 cat -vet 作为 post 处理过滤器,您可以这样做:

cmd = ['git', '-C', repo, 'show', r'{0}:{1}'.format(commit, filename)]
p1 = subprocess.Popen(cmd, stdout = subprocess.PIPE)
filter = [ '/bin/cat', '-vet' ]
p2 = subprocess.Popen(filter, stdout = subprocess.PIPE, stdin = p1.stdout)
p2.wait()
stdout = p2.stdout.read()