首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何捕获管道进程生成的子进程的输出?

如何捕获管道进程生成的子进程的输出?
EN

Stack Overflow用户
提问于 2018-05-24 16:25:12
回答 1查看 40关注 0票数 0

我想持续监控一个管道进程,并在它进来时打印它的stdoutstderr (我不想在它退出后立即获得整个输出)。问题是管道进程产生了另一个子进程,而该派生进程的stdoutstderr无法使用原始进程的管道访问。

也就是说,我想以这种方式运行python程序,所以管道进程就是python解释器,但是python解释器会在另一个子进程中生成python程序的运行,所以我无法获得该子进程的输出(实际的程序输出)。如果启动程序时出错,我可以得到这一点,因为这是打印到原来的python解释器的stderr。但是对于我来说,来自实际程序的正常的stdout已经丢失了。

我在用subprocess.Popen

编辑:一个评论者要求提供一个代码示例,我不认为这会增加太多内容,但是下面是我的代码( PopenProcess是一个用于subrpocess.Popen的智能包装类,但没有什么特别之处):

代码语言:javascript
复制
class BTask:
    def __init__(self, name, cmds, color = "NONE"):
        self.name = name
        self.cmds = cmds
        self.color = color
        self.proc = None

    def procreadline(self, sline):
        print(ANSI[self.color] + self.name + ANSI["ENDC"] + " > " + ANSI[self.color] + sline)

    def procreaderror(self, sline):
        print(ANSI[self.color] + self.name + ANSI["BRIGHTWHITE"] + " ! " + ANSI["BRIGHTRED"] + sline)

    def run(self):        
        print(ANSI["GREEN"])
        print("running task: {} {}".format(ANSI["BRIGHTGREEN"], self.name))
        pargs = []
        if len(self.cmds) > 1:
            pargs = self.cmds[1:]        
        print(ANSI[self.color])
        self.proc = PopenProcess(
            self.cmds[0],
            self.procreadline,
            read_error_callback = self.procreaderror,
            proc_args = pargs,
            ignore_cwd = True
            )

    def kill(self):
        print(ANSI["RED"])
        print("killing task: {} {}".format(ANSI["BRIGHTRED"], self.name))
        self.proc.kill()

    def is_alive():
        return self.proc.is_alive()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-24 17:07:24

作为管道化的过程,而不是

代码语言:javascript
复制
subprocess.Popen(['python', 'myprog.py'])

应该用

代码语言:javascript
复制
subprocess.Popen(['python', '-u', 'myprog.py'])

那就成功了。

问题是缓冲输出,而-u开关则关闭(允许未缓冲的输出)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50514046

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档