0

我也是 python 编程和编程的新手。如果这听起来是一个基本问题,请原谅。

我正在开发一个在 git 上执行 make clean 和 make 的工具。

我正在使用 subprocess 模块来运行这些 make 命令。

一项观察是:我使用通信来查看 make 命令的结果。沟通的问题是,它等待 subprocess.popen 完成然后发送输出。

如果 make 命令运行 30 分钟,则屏幕上没有输出 30 分钟,然后通信发送它在 30 分钟内收集的全部数据。

问题是:有没有办法在标准输出上显示某些内容时从子进程获取输出,然后在屏幕上打印出来?

到目前为止我写的代码是:

def makeClean(path,cmd1='make',cmd2='clean'):
    print '+++++++++++ RUNNING MAKE CLEAN  +++++++++++ \n'
    c = subprocess.Popen([cmd1 , cmd2],stdout = subprocess.PIPE, stderr = subprocess.PIPE,cwd = path)
    out = c.communicate()[0]
    for line in out.split('\r\n'): print line

对此有什么想法吗?我尝试使用 pexpect.run() 但这对我不起作用......

-维杰

4

1 回答 1

2

如果输出应该转到标准输出,那么不要将其重定向回调用进程。只是

subprocess.call([cmd1, cmd2], cwd=path)

会做。如果您确实需要以某种方式处理输出,请不要使用communicate而是直接从管道中读取:

proc = subprocess.Popen([cmd1, cmd2], stdout=subprocess.PIPE, cwd=path)
for ln in proc.stdout:
    process(ln)
于 2012-07-04T14:35:01.037 回答