C# Linux上的.NET内核:是否重定向标准输出?
在Windows上,我使用以下代码确定是否为当前运行的进程重定向标准输出流:C# Linux上的.NET内核:是否重定向标准输出?,c#,linux,.net-core,console,C#,Linux,.net Core,Console,在Windows上,我使用以下代码确定是否为当前运行的进程重定向标准输出流: private static bool? isOutputRedirected; public static bool IsOutputRedirected { get { if (isOutputRedirected == null) { isOutputRedirected = GetFileType(GetS
private static bool? isOutputRedirected;
public static bool IsOutputRedirected
{
get
{
if (isOutputRedirected == null)
{
isOutputRedirected =
GetFileType(GetStdHandle(StdHandle.Output)) != FileType.FileTypeChar ||
!GetConsoleMode(GetStdHandle(StdHandle.Output), out _);
// Additional GetConsoleMode check required to detect redirection to "nul"
}
return isOutputRedirected == true;
}
}
private enum StdHandle : int
{
Input = -10,
Output = -11,
Error = -12,
}
private enum FileType : uint
{
FileTypeChar = 0x0002,
FileTypeDisk = 0x0001,
FileTypePipe = 0x0003,
FileTypeRemote = 0x8000,
FileTypeUnknown = 0x0000,
}
[DllImport("kernel32.dll")]
private static extern FileType GetFileType(IntPtr hFile);
[DllImport("kernel32.dll", SetLastError = true)]
private static extern IntPtr GetStdHandle(StdHandle nStdHandle);
[DllImport("kernel32.dll", SetLastError = true)]
private static extern bool GetConsoleMode(IntPtr hConsoleHandle, out uint lpMode);
对于其他两个标准流,我有类似的属性
当显示进度信息或试图用新内容更新当前行时,需要使用此选项来处理这种情况。当输出被重定向时,这是没有用的,因此输出应该减少到更简单的内容
但是,在Linux上运行时,这会像预期的那样失败(dotnet publish-r Linux arm
)
如何确定Linux上的相同情况?web似乎对此一无所知。对于.NET Framework 4.5及更高版本,您可能需要查看
控制台。IsOutputRedirected
和控制台。IsErrorRedirected
资料来源: