需要进行子流程通信b

2024-04-26 06:24:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我是python编程和编程的新手。所以请原谅,如果这听起来是一个基本的问题。你知道吗

我正在开发一个工具,当然可以在git上执行makeclean和make。你知道吗

我正在使用子进程模块来运行这些make命令。你知道吗

一个观察结果是:我使用communicate查看make命令的结果。通信的问题是,它等待子流程.popen完成,然后发送输出。你知道吗

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

问题是:有没有一种方法可以在stdout上显示某个内容时从子进程获取输出,然后在屏幕上打印出来?你知道吗

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

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

有什么想法吗?我试着用预期运行()但这对我不起作用。。。你知道吗

-维杰


Tags: path命令make屏幕进程编程stdoutline
1条回答
网友
1楼 · 发布于 2024-04-26 06:24:02

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

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

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

proc = subprocess.Popen([cmd1, cmd2], stdout=subprocess.PIPE, cwd=path)
for ln in proc.stdout:
    process(ln)

相关问题 更多 >