Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 输出显示在控制台中,但重定向到文件时消失_Windows_Cmd - Fatal编程技术网

Windows 输出显示在控制台中,但重定向到文件时消失

Windows 输出显示在控制台中,但重定向到文件时消失,windows,cmd,Windows,Cmd,我正在使用一个测试硬盘的工具,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 (35

我正在使用一个测试硬盘的工具,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(通过启动进程)更仔细地查看它,标准输出和标准错误流都是空的

我尝试过的其他事情:

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++,输出是简单的<代码> Prtff语句。

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

fstest.exe otherParams 2> out.txt

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

fstest.exe otherParams 2> out.txt

CMD
可以处理。尝试将它们重定向到单独的文件,以标识程序写入的描述符:

fstest.exe {params} 0>out0.txt 3>out3.txt 4>out4.txt 5>out5.txt ...

CMD
可以处理。尝试将它们重定向到单独的文件,以标识程序写入的描述符:

fstest.exe {params} 0>out0.txt 3>out3.txt 4>out4.txt 5>out5.txt ...

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


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

在对该程序执行
printf
后,发现该程序没有刷新标准输出。显然,cmd在打印到控制台时愿意刷新该缓冲区,但在将输出重定向到文件时不愿意。(或者在控制台强制刷新之前文件句柄已关闭。)程序正常退出(通过返回,退出代码始终为0)


回答这个问题:我必须修改程序;我无法通过命令行切换或重定向来改变它。

唉,运气不好。我已经尝试将两条流重定向到该文件。@Paul Marshall当你弄明白这一点后,发布它——我现在真的很好奇。唉,运气不好。我已尝试将两个流重定向到该文件。@PaulMarshall当你弄明白这一点后,发布它--我现在真的很好奇。它关闭了cmd窗口,out4.txt中有命令提示符,但所有其他流都是空的。它关闭了cmd窗口,out4.txt中有命令提示符,但是其他的都是空的。你的程序是否正常退出(通过返回)?或者你用信号中断来打断它?可能是缓冲区没有被刷新,或者如果它以这种方式退出的话,它总是正常退出(通过返回,退出代码为0),但是由于某种原因,它在重定向到文件时不会刷新缓冲区——只有在打印到控制台时才会刷新缓冲区。您的程序是否正常退出(通过返回)?或者你用信号中断来打断它?这可能是因为缓冲区没有被刷新,或者如果它以这种方式退出,它总是正常退出(通过返回,退出代码为0),但是由于某种原因,它在重定向到文件时不会刷新缓冲区——只有在打印到控制台时才刷新缓冲区。哈!我是对的。。。我应该把它贴出来作为回答。很高兴你修好了,很有趣。我本以为程序终止会刷新与进程相关的任何IO缓冲区。@Gray它并没有异常退出,尽我所能。退出代码始终为0,仔细阅读源代码(无可否认,没有调试器)使其看起来像正常退出。哈!我是对的。。。我应该把它贴出来作为回答。很高兴你修好了,很有趣。我本以为程序终止会刷新与进程相关的任何IO缓冲区。@Gray它并没有异常退出,尽我所能。退出代码始终为0,仔细阅读源代码(无可否认,没有调试器)使其看起来像正常退出。