如何在 Windows 上以编程方式捕获命令的输出

发布于 2024-09-14 02:24:36 字数 258 浏览 6 评论 0原文

问题说了什么。

最终我想要的是执行 gcc 并 如果出现错误则捕获输出。问题是错误被写入 stderr 而不是 stdout。在 Linux 上我可以做

gcc foo.c 2>&1

如何在 Windows 上完成此操作?

What the question says.

Ultimately what I want is to execute gcc and capture the output if there's an error. The problem is errors are written to stderr instead of stdout. On Linux I can do

gcc foo.c 2>&1

How can I accomplish this on Windows?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

只是一片海 2024-09-21 02:24:36

有。只需右键单击控制台窗口,选择标记。用鼠标选择所需区域并右键单击。现在您可以使用 Ctrl-V 将其粘贴到文本文件中。

如果您需要将程序的输出输出到文本文件中,请像这样运行它:

myprogram.exe > myfile.txt

请参阅此处有关重定向的信息:
1. 使用命令重定向运算符
2. 从命令提示符重定向错误消息:STDERR/STDOUT

你可以像这样做你想做的事: D:\>dir 1>测试.txt 2> testerr.txt

There is. Simply right click into the console window, select Mark. With your mouse select the desired area and right click. Now you can paste it into a text file with Ctrl-V.

If you need the output of a program into a text file, run it like this:

myprogram.exe > myfile.txt

See here about redirecting:
1. Using command redirection operators
2. Redirecting Error Messages from Command Prompt: STDERR/STDOUT

You can do what you want like this: D:\>dir 1> test.txt 2> testerr.txt

手长情犹 2024-09-21 02:24:36

理查德,你的“接受的答案”太长而且太错误了。

对您的问题的简短回答(如您最后一句话中所述:“我如何在 Windows 上完成此操作?”)是:

就像您在 Linux 上所做的一样!


但是我也会给你一个很长的答案。

您的 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

现在的结果:

  1. 窗口中没有任何内容,
  2. 所有内容都在 all.log 中。

这与 Linux 上的 stderr/stdout 重定向行为相同。

Richard, your "accepted answer" is too long and it is too wrong.

The short answer to your question (as currently stated in your last sentence: "How can I accomplish this on Windows?") is:

Exactly like you do it on Linux!


But I'll also give you a long answer.

Your 2>&1 redirection works in a cmd.exe window the same way. I even re-tested it right now, since my cmd.exe experience is a bit rusty. I used this Ghostscript command (intentionally meant to produce output on stdout as well as on stderr):

gswin32c -sDEVICE=nullpage -dFirstPage=12 -dLastPage=11 my-20-page-test.pdf

I got all the expected output into the shell window. Then I did:

gswin32c -sDEVICE=nullpage -dFirstPage=12 -dLastPage=11 my-20-page-test.pdf ^
          1>stdout.log

and stderr still printed into the window, but stdout.log had the 'missing' original output. Next I did:

gswin32c -sDEVICE=nullpage -dFirstPage=12 -dLastPage=11 my-20-page-test.pdf ^
          2>stderr.log

and stdout now printed into window, while stderr.log had the rest of Ghostscript's messages. Next:

gswin32c -sDEVICE=nullpage -dFirstPage=12 -dLastPage=11 my-20-page-test.pdf ^
          1>stdout.log 2>stderr.log

and (as expected): no output in window, all output divided up between stdout.log and stderr.log. Last test:

gswin32c -sDEVICE=nullpage -dFirstPage=12 -dLastPage=11 my-20-page-test.pdf ^
          1>all.log 2>&1

and result now:

  1. nothing in window,
  2. everything in all.log.

Which is the same behaviour as stderr/stdout redirection as on Linux.

无声无音无过去 2024-09-21 02:24:36

如果您想要特定命令的输出,有一种简单的方法可以将控制台输出推送到文件。

下面是一个使用“dir”命令的简单示例(前面的 > 代表您的提示符):

>dir > diroutput.txt

If you want the output of a particular command, there's a simple way to push console output to a file.

Here's a trivial example using the 'dir' command (the leading > represents your prompt):

>dir > diroutput.txt

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文