2

我正在使用一个测试硬盘的工具 fstest.exe。它从命令行运行良好,显示执行各种文件创建/删除/修改任务需要多长时间。从命令行 as 运行时,通常的输出fstest.exe otherParams如下所示:

---
CPU Usage: 0.0%
Disk reads/sec: 0
Disk writes/sec: 0
Disk bytes/read: 0
Disk bytes/write: 0
Test duration: 0 milliseconds, 1153 ticks (3507177 ticks/sec)
---

问题是,当我将输出重定向到文件时,它不显示任何内容:

fstest.exe otherParams > out.txt创建一个空的 out.txt 文件,即使该命令执行得很好(并创建了一些测试文件作为其执行的一部分)。

如何强制此应用程序将输出重定向到文件?我尝试使用 PowerShell(通过 Start-Process)更仔细地查看它,标准输出和标准错误流都是空的。

我尝试过的其他事情:

cmd /c "fstest.exe otherParams > out.txt"

fstest.exe otherParams 2>&1 >> out.txt

fstest.exe otherParams | sort

powershell Start-Process -FilePath .\fstest.exe -ArgumentList @("create2", "-openexisting") -RedirectStandardOutput out.txt -RedirectStandardError err.txt -wait

(这会创建 out.txt 和 err.txt,两者都是空的。)

什么会导致应用程序根据它是否被重定向而改变其输出,有什么方法可以让它重定向到文件?

更新:我已经掌握了源代码。它是 C++,输出只是简单的printf语句。

4

3 回答 3

3

事实证明,有问题的程序在执行完之后并没有刷新标准输出printf。显然, cmd 愿意在打印到控制台时刷新该缓冲区,而不是在将输出重定向到文件时。(或者可能在控制台强制刷新之前文件句柄已关闭。)程序正常退出(通过返回,退出代码始终为 0)。

回答这个问题:我必须修复程序;我无法使用命令行开关或重定向来更改它。

于 2013-07-10T18:19:56.260 回答
2

CMD最多可以处理10 个文件描述符。尝试将它们重定向到单独的文件以识别您的程序写入的描述符:

fstest.exe {params} 0>out0.txt 3>out3.txt 4>out4.txt 5>out5.txt ...
于 2013-07-10T10:18:27.870 回答
1

如果它写入标准错误,而不是标准输出,则重定向:

fstest.exe otherParams 2> out.txt
于 2013-07-10T02:17:21.520 回答