在Python中为Awk使用子进程

问题描述 投票:0回答:2

我正在尝试从Python文件中运行此命令git status -vv | awk 'NR>5 {print $0}'。但是我无法使awk命令正常工作。

这是我的git st的示例结果:

# On branch master
# Your branch is ahead of master by 2 commits.
#
#
#       modified:   file1
#       modified:   file2
#       modified:   file3

当我从终端运行命令时,我得到了想要的东西:

#       modified:   file1
#       modified:   file2
#       modified:   file3

我在Python脚本中无法实现它:

import sys
import subprocess as sb

ps = sb.Popen(("git","status","-vv"),stdout=sb.PIPE)
output = sb.check_output(('awk','"NR>5 {print $0}"'),stdin=ps.stdout)
print output

但是,这仅返回git st结果,而不在行上执行awk。我如何在python中执行此操作,以获取与在终端中运行时相同的输出。

python git unix awk subprocess
2个回答
1
投票

以下代码应该可以工作(只需删除awk参数的双引号)

import sys
import subprocess as sb

ps = sb.Popen(("git","status","-vv"),stdout=sb.PIPE)
output = sb.check_output(('awk','NR>5 {print $0}'),stdin=ps.stdout)
print output

0
投票

这可能更简单:

#!/usr/bin/python3                                                                                                                                                                 

import sys
import subprocess as sb

cmd = "git status -vv | awk '(NR>5){ print $0 }'"

output = sb.check_output(cmd, stderr=sb.STDOUT, shell=True)
sys.stdout.write('{}'.format(output))
© www.soinside.com 2019 - 2024. All rights reserved.