我正在使用测试硬盘的工具fstest.exe。它从命令行运行良好,显示执行各种文件创建/删除/管理任务所需的时间。从命令行以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
语句。
答案 0 :(得分:3)
事实证明,在对printf
进行{{1}}之后,有问题的程序并未刷新stdout。显然,cmd在打印到控制台时愿意刷新缓冲区,但在将输出重定向到文件时则不行。 (或者在控制台强制刷新之前,文件句柄可能已关闭。)程序正常退出(通过返回,退出代码始终为0)。
回答这个问题:我必须修理这个程序;我无法用命令行开关或重定向来改变它。
答案 1 :(得分:2)
CMD
可以处理up to 10 file descriptors。尝试将它们重定向到单独的文件,以识别程序写入的描述符:
fstest.exe {params} 0>out0.txt 3>out3.txt 4>out4.txt 5>out5.txt ...
答案 2 :(得分:1)
如果它写入标准错误,而不是标准输出,则重定向:
fstest.exe otherParams 2> out.txt