ow
This commit is contained in:
1 parent
5f222a23b3
commit
a71094cbf5
3 files changed
+134
-18
No files matched your search
@@ -0,0 +1,68 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace CloudBuilder.Topshelf.Utility
|
||||
{
|
||||
// 先把这个类放到你的代码文件里
|
||||
public static class ConsoleHelper
|
||||
{
|
||||
[DllImport("kernel32.dll")]
|
||||
static extern IntPtr GetStdHandle(int nStdHandle);
|
||||
|
||||
[DllImport("kernel32.dll")]
|
||||
static extern int SetStdHandle(int nStdHandle, IntPtr hHandle);
|
||||
|
||||
const int STD_OUTPUT_HANDLE = -11;
|
||||
const int STD_ERROR_HANDLE = -12;
|
||||
|
||||
/// <summary>
|
||||
/// 屏蔽所有底层C++输出(彻底隐藏 SherpaOnnx 日志)
|
||||
/// </summary>
|
||||
public static void DisableConsoleOutput()
|
||||
{
|
||||
var nullHandle = IntPtr.Zero;
|
||||
SetStdHandle(STD_OUTPUT_HANDLE, nullHandle);
|
||||
SetStdHandle(STD_ERROR_HANDLE, nullHandle);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 恢复输出(如果你需要)
|
||||
/// </summary>
|
||||
public static void EnableConsoleOutput()
|
||||
{
|
||||
var outHandle = GetStdHandle(STD_OUTPUT_HANDLE);
|
||||
var errHandle = GetStdHandle(STD_ERROR_HANDLE);
|
||||
SetStdHandle(STD_OUTPUT_HANDLE, outHandle);
|
||||
SetStdHandle(STD_ERROR_HANDLE, errHandle);
|
||||
}
|
||||
}
|
||||
|
||||
public static class ConsoleOutput
|
||||
{
|
||||
private const int STD_ERROR_HANDLE = -12;
|
||||
private static IntPtr _originalErrorHandle;
|
||||
|
||||
[DllImport("kernel32.dll")]
|
||||
private static extern IntPtr GetStdHandle(int nStdHandle);
|
||||
|
||||
[DllImport("kernel32.dll")]
|
||||
private static extern bool SetStdHandle(int nStdHandle, IntPtr hHandle);
|
||||
|
||||
/// <summary>
|
||||
/// 只关闭 标准错误输出(stderr)
|
||||
/// 作用:屏蔽 sherpa-onnx 所有垃圾日志
|
||||
/// 保留:你的进度条、控制台输出(stdout)
|
||||
/// </summary>
|
||||
public static void HideStdError()
|
||||
{
|
||||
_originalErrorHandle = GetStdHandle(STD_ERROR_HANDLE);
|
||||
SetStdHandle(STD_ERROR_HANDLE, IntPtr.Zero);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,56 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace CloudBuilder.Topshelf.Utility
|
||||
{
|
||||
public static class SherpaLogFilter
|
||||
{
|
||||
/// <summary>
|
||||
/// 只屏蔽 sherpa-onnx 输出的日志,不影响你的进度条
|
||||
/// </summary>
|
||||
public static void HideSherpaOnnxLogs()
|
||||
{
|
||||
// 过滤 stdout
|
||||
var originalOut = Console.Out;
|
||||
Console.SetOut(new FilterWriter(originalOut));
|
||||
|
||||
// 过滤 stderr
|
||||
var originalError = Console.Error;
|
||||
Console.SetError(new FilterWriter(originalError));
|
||||
}
|
||||
|
||||
private class FilterWriter : TextWriter
|
||||
{
|
||||
private readonly TextWriter _inner;
|
||||
public FilterWriter(TextWriter inner) => _inner = inner;
|
||||
public override Encoding Encoding => Encoding.UTF8;
|
||||
|
||||
public override void WriteLine(string value)
|
||||
{
|
||||
// 屏蔽包含这些关键词的日志
|
||||
if (!ShouldFilter(value))
|
||||
_inner.WriteLine(value);
|
||||
}
|
||||
|
||||
public override void Write(string value)
|
||||
{
|
||||
// 关键:不屏蔽 Write(...) → 你的进度条就是用 Write 输出的,会保留!
|
||||
if (!ShouldFilter(value))
|
||||
_inner.Write(value);
|
||||
}
|
||||
|
||||
private bool ShouldFilter(string s)
|
||||
{
|
||||
if (s == null) return false;
|
||||
return
|
||||
s.Contains("sherpa-onnx") ||
|
||||
s.Contains("character-lexicon.cc") ||
|
||||
s.Contains("Ignore OOV") ||
|
||||
s.Contains("ConvertTextToTokenIds");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user