为什么pyuv.pipe.start\u read(…)会导致pyuv.process.spawn上的分段错误?

2024-06-16 11:48:04 发布

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

使用pyuv运行此代码以生成进程并捕获其stdout和stderr:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import pyuv


def on_read(pipe, data, error):
    print('data: ' + str(data))


def on_exit(process, exit_status, term_signal):
    print('Process Terminated - exit code: ' + str(exit_status))


def start():

    stdin_pipe = pyuv.Pipe(pyuv.Loop.default_loop())
    stdout_pipe = pyuv.Pipe(pyuv.Loop.default_loop())
    stderr_pipe = pyuv.Pipe(pyuv.Loop.default_loop())

    stdout_pipe.start_read(on_read)
    stderr_pipe.start_read(on_read)

    stdio = [pyuv.StdIO(stream=stdin_pipe, flags=pyuv.UV_CREATE_PIPE | pyuv.UV_READABLE_PIPE),
             pyuv.StdIO(stream=stdout_pipe, flags=pyuv.UV_CREATE_PIPE | pyuv.UV_WRITABLE_PIPE),
             pyuv.StdIO(stream=stderr_pipe, flags=pyuv.UV_CREATE_PIPE | pyuv.UV_WRITABLE_PIPE)]

    process = pyuv.Process(pyuv.Loop.default_loop())
    process.spawn(loop=pyuv.Loop.default_loop(), 
            args=['/usr/bin/wget', 'http://www.google.com'],
            exit_callback=on_exit,
            stdio=stdio)

    pyuv.Loop.default_loop().run()


if __name__ == '__main__':
    start()

产生Segmentation fault (core dumped)

对管道实例上的'start\u read()'调用进行注释是可行的,但没有给出stdout和stderr

我错过了什么

这不是在pyuv中捕获派生进程上的stdout和stderr的正确方法吗


Tags: loopdefaultreaddataondefstderrstdout
1条回答
网友
1楼 · 发布于 2024-06-16 11:48:04

哦,我的。。。把Pipe.start_read()回调放在Process.spawn()之后就可以了

process = pyuv.Process(pyuv.Loop.default_loop())
process.spawn(loop=pyuv.Loop.default_loop(), 
        args=['/usr/bin/wget', 'http://www.google.com'],
        exit_callback=on_exit,
        stdio=stdio)

stdout_pipe.start_read(on_read)
stderr_pipe.start_read(on_read)

pyuv.Loop.default_loop().run()

面部手掌

相关问题 更多 >