问题是什么。
最终我想要的是执行gcc和capture the output if there's an error。问题是错误被写入stderr而不是stdout。在Linux上我可以做到
gcc foo.c 2>&1
如何在Windows上完成此操作?
答案 0 :(得分:5)
有。只需右键单击控制台窗口,选择Mark
即可。用鼠标选择所需区域并右键单击。现在,您可以使用Ctrl-V将其粘贴到文本文件中。
如果您需要将程序输出到文本文件中,请按以下方式运行:
myprogram.exe > myfile.txt
请参阅此处有关重定向的信息:
1. Using command redirection operators
2. Redirecting Error Messages from Command Prompt: STDERR/STDOUT
你可以这样做:D:\>dir 1> test.txt 2> testerr.txt
答案 1 :(得分:4)
理查德,你的“接受的答案”太长了,而且太错了。
您问题的简短回答(正如您在上一句话中所述:“我如何在Windows上完成此操作?”)是:
但我 也 给你一个很长的答案。
您的2>&1
重定向以相同的方式在cmd.exe
窗口中运行。我甚至现在重新测试它,因为我的cmd.exe经验有点生疏。我使用了这个Ghostscript命令(故意用于在stdout和stderr上产生输出):
gswin32c -sDEVICE=nullpage -dFirstPage=12 -dLastPage=11 my-20-page-test.pdf
我将所有预期的输出都输入到shell窗口中。然后我做了:
gswin32c -sDEVICE=nullpage -dFirstPage=12 -dLastPage=11 my-20-page-test.pdf ^
1>stdout.log
并且stderr仍然打印在窗口中,但是stdout.log有“缺失”的原始输出。接下来我做了:
gswin32c -sDEVICE=nullpage -dFirstPage=12 -dLastPage=11 my-20-page-test.pdf ^
2>stderr.log
和stdout现在打印到窗口中,而stderr.log则有剩下的Ghostscript消息。下一个:
gswin32c -sDEVICE=nullpage -dFirstPage=12 -dLastPage=11 my-20-page-test.pdf ^
1>stdout.log 2>stderr.log
和(正如预期的那样):窗口中没有输出,所有输出在stdout.log和stderr.log之间划分。最后一次测试:
gswin32c -sDEVICE=nullpage -dFirstPage=12 -dLastPage=11 my-20-page-test.pdf ^
1>all.log 2>&1
现在结果:
与stderr / stdout重定向的行为与在Linux上的行为相同。
答案 2 :(得分:0)
如果您想要输出特定的命令,可以通过一种简单的方法将控制台输出推送到文件。
这是使用'dir'命令的一个简单示例(前导>表示您的提示):
>dir > diroutput.txt