我已经设法用一些编程语言捕获了许多命令行工具的实时stdout(和stderr),但是有一些工具我无法使用。 工具包括:
下面的代码示例可以很好地打印大多数命令行工具(例如robocy)的进度。 "7za.exe文件但是,它将首先运行完整的基准测试,然后一次性打印所有标准输出(即not live)。你知道吗
如果在cmd提示符下运行相同的命令,可以看到基准在基准期间打印到控制台。你知道吗
我尝试过刷新、同步、异步,为子进程创建无缓冲的输出流,其中大部分都是用C#和Python实现的。你知道吗
似乎什么都没用。你知道吗
namespace ConsoleApp
{
class Program
{
static void Main()
{
var process = new System.Diagnostics.Process
{
StartInfo = new System.Diagnostics.ProcessStartInfo
{
FileName = "7za.exe",
Arguments = "b",
UseShellExecute = false,
RedirectStandardOutput = true
}
};
process.OutputDataReceived += (sender, args) => System.Console.WriteLine(args.Data);
process.Start();
process.BeginOutputReadLine();
process.WaitForExit();
}
}
}
我快速浏览了一下7-Zip源代码,没有发现任何异常。 下面是7-Zip的大致功能:
CStdOutStream g_StdOut(stdout);
CStdOutStream &so = (g_StdStream ? *g_StdStream : g_StdOut);
CStdOutStream &so = g_StdOut;
FILE* _file = (FILE*)so;
fputs("blah", _file)
我还注意到一些事情。。。你知道吗
运行“7za.exe文件在Cygwin中,在基准测试完成之前,也不会打印任何进度。你知道吗
ConEmu能够打印实时输出,但是调试代码和阅读文档并没有告诉我它是如何工作的。我认为它与“Windows控制台”有关(而不是命令提示符)和CSRSS。你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐