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()
我被困在无法通过 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()