我陷入了无法通过 core.pager 运行“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)
我得到的输出尚未通过 cat 寻呼机(这些行将以“$”结尾)
当我自己从 cli 运行它时,输出确实通过寻呼机。 我应该如何调用子进程来让“git show”命令通过 core.pager 运行?
最佳答案
据我所知,当输出定向到终端时,git
仅通过配置的寻呼机对输出进行后处理。由于您使用的是 subprocess.check_output,因此 git 命令的输出将被重定向到管道(以允许将其提供给 Python 调用者)。因此 core.pager
不会被调用。
如果您想获得后处理的输出,则必须手动
假设您想使用 cat -vet
作为后处理过滤器,您可以这样做:
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()
关于Python subprocess.Popen 使用 git pager,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34241422/