我有一个调用可执行程序的批处理文件。程序(编译的C代码)生成一些输出到stdout。批量回声也有一些输出。运行bat时,我使用重定向(>)将文本转换为文件。
mybat.bat包含:
myprog.exe arg1 %1 arg3
echo Done
然后,在控制台:
C:\> mybat arg2 > log.txt
问题在于log.txt
我只得到echo Done
命令的输出而不是myprog.exe
的输出。如果没有重定向,我会在屏幕上得到预期的输出。
注意:在Windows XP下
更新:这变得更加怪异。从命令提示符运行myprog.exe
时,我得到预期的输出到控制台。然后,当将其输出重定向到log.txt
时,该文件为空!打印是使用fprintf(stdout, "...")
或fprintf(ofp, "...")
完成的,其中ofp
已分配:FILE *ofp = stdout;
。
进一步调查:似乎重定向的fprintf(stdout...
行,而fprintf(ofp...
不是(是的,指针被正确分配)。我还发现程序在某个时刻崩溃(调用feof()
)。所以,我的结论是,由于程序的异常终止,标准输出缓冲区没有写入文件。但是 - 这只发生在使用指针的行上。我猜这些行的输出较短,因此刷新频率较低(我使用stdout行打印故意的帮助信息)。
解决崩溃问题后,数据现在会重定向到日志文件。谢谢你的帮助。
答案 0 :(得分:0)
尝试将stdout和stderr重定向到日志文件。
mybat arg2 1>&2> log.txt
答案 1 :(得分:0)
试试这个:
cmd /c "mybat.bat arg2" > log.txt