You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级至IronPython 3后输出重定向功能失效问题排查

IronPython 3 升级后输出重定向失效的解决方案

IronPython 3 对标准输出的底层调用逻辑和IronPython 2存在差异,你的自定义UnityLogWriter只重写了Write(string)方法,但IronPython 3 现在主要通过Write(char[], int, int)这类字符数组重载来输出内容,导致你的日志捕获逻辑无法触发。

修改后的UnityLogWriter实现

将输出处理逻辑提取为公共方法,并重写所有可能被调用的Write重载,确保覆盖IronPython 3的输出场景:

public class UnityLogWriter : StreamWriter
{
    private readonly Action<string> _logger;
    private string _buffer = "";

    public UnityLogWriter(Action<string> logger, Stream stream) : base(stream)
    {
        _logger = logger ?? throw new ArgumentNullException(nameof(logger));
    }

    // 统一处理输出内容的逻辑
    private void ProcessOutput(string value)
    {
        _buffer += value;
        var lines = _buffer.Split('\n');
        
        for (int i = 0; i < lines.Length; i++)
        {
            if (i == lines.Length - 1)
            {
                _buffer = lines[i];
            }
            else
            {
                // 移除Windows风格的\r换行符,避免Unity日志出现多余空行
                _logger(lines[i].TrimEnd('\r'));
            }
        }
    }

    // 兼容IronPython 2的string输出调用
    public override void Write(string value)
    {
        base.Write(value);
        ProcessOutput(value);
    }

    // 适配IronPython 3的核心输出调用
    public override void Write(char[] buffer, int index, int count)
    {
        string value = new string(buffer, index, count);
        base.Write(buffer, index, count);
        ProcessOutput(value);
    }

    // 覆盖单个字符的输出场景
    public override void Write(char value)
    {
        base.Write(value);
        ProcessOutput(value.ToString());
    }
}

输出重定向代码保持不变

你的原有重定向逻辑无需修改,直接使用即可:

var infoStream = new MemoryStream();
var infoWriter = new UnityLogWriter(Debug.Log, infoStream);
engine.Runtime.IO.SetOutput(infoStream, infoWriter);

额外提示

如果仍有输出延迟问题,可以在Python代码执行完成后调用infoWriter.Flush(),确保缓冲区剩余的内容被处理。

内容的提问来源于stack exchange,提问作者Riley B

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 20:23:11