Articles of stderr

从后台进程redirectstdout&stderr

我有一个名为foo的脚本运行程序a.exe,并将计时统计信息发送到文件time.log #!/bin/bash date 1>> time.log (time ./a.exe) 2>> time.log 如果我在terminal的后台运行脚本,并保持我的shell打开,直到a.exe完成,但如果我在后台运行脚本并退出我的terminal(a.exe需要很长时间才能运行) foo & exit 当我回来,a.exe已经执行,但时间统计信息不会出现在我的日志文件。 有人知道为什么吗? 是否有一种方法可以在closures父shell之后获取计时统计信息? 谢谢

确定STDERR是否要去terminal

我有一套Java程序,在我们的Linux服务器上用作命令行工具。 他们大多使用一个在STDERR上打印进度条的类,类似于Perl的Term::ProgressBar 。 我希望每当STDERR进入terminal时都会显示进度条,并且在STDERR被redirect时自动禁用自身,这样redirect的数据中就没有各种进度条了。 检查System.console() == null是我的第一个想法,但redirectSTDOUT就足以使这是true ,即使STDERR仍然要去terminal。 有什么我可以检查是特定于STDERR? 特定于Linux的解决scheme或使用本机API的解决scheme对于我的需求可以。

打印STDOUT / STDERR并将它们写入Bash中的文件?

有没有办法让Bash将STDOUT / STDERRredirect到一个文件,但仍然打印到terminal?

禁用stdout和stderr缓冲是否安全?

有时我们用这种方法在代码中放置一些debugging打印件 printf("successfully reached at debug-point 1\n"); some code is here printf("successfully reached at debug-point 2"); Here segmantaion fault occur due to some reason 现在在这种情况下,只有debug-point1将打印在stdiodebugging点2打印被写入stdio缓冲区,但它不刷新,因为它没有得到\n所以我们认为崩溃发生在debugging点1 如果我用这种方式禁用stdio和stderrstream的缓冲选项,从这里来 setvbuf(stdout, NULL, _IONBF, 0); setvbuf(stderr, NULL, _IONBF, 0); 那么这是安全的做到这一点? 为什么所有的stream都默认行缓冲? 编辑: Usualy对于任何文件stream,默认分配的缓冲区的大小是多less? 我认为它的OS依赖。 我想知道关于Linux?

如何作为Systemd服务运行输出到文件?

在将程序作为systemd服务运行时,我无法将STDOUT&STDERR传输到文件。 我已经尝试将以下内容添加到.service文件中: ExecStart=/apppath/appname > /filepath/filename 2>&1 但是这不起作用。 输出结果在/ var / log / messages中,可以使用journalctl查看,但我想要一个单独的文件。 我也试过设置StdOutput=tty但是找不到将其redirect到文件的方法。 任何帮助,将不胜感激。

Windows上的System.err在哪里?

我有一个基于Java GUI的应用程序,它将一些诊断消息写入System.out和System.err。 在Windows上运行时,这些消息在哪里输出? (例如,在Mac OS X上,它们被打印到系统控制台日志中。) 编辑 我应该补充说,Java应用程序打包成.exe,所以(现在)我不能启动它使用java 。 (我想可以将单个.JAR文件复制到Windowstesting机器上。) 另外,这是我inheritance的一个应用程序,之前没有使用日志框架。 我想修改它使用一个,但我希望能够快速获得一些日志输出来诊断问题。

有什么办法可以在Windows命令行中使用“start”运行命令redirectstderr输出吗?

我有一个程序,我想自动运行,因为它需要一段时间才能完成。 出于某种原因,它会输出一切到stderr而不是标准输出,我想检查它的进度,所以我发现自己需要在启动命令中redirectstderr输出。 我试过这个: start "My_Program" "C:\Users\Me\my_program.exe" –some –presets –for –my_program.exe –output "C:\Users\Me\output_file_for_my_program" "C:\Users\Me\input_file_for_my_program" 2>"C:\Users\Me\my_program_output.log" 但事实certificate,redirect正在被启动,所以我得到一个0字节的文件,结果是start – 即没有。 有什么办法使输出redirect以某种方式附加到my_program的输出? 我已经尝试过逃跑,而且^2>和2^>似乎都不起作用。 任何帮助将不胜感激!

Powershell:捕获程序stdout和stderr来分离variables

在一次运行中,是否可以将外部程序的stdoutredirect到外部程序的variables和stderr? 例如: $global:ERRORS = @(); $global:PROGERR = @(); function test(){ # Can we redirect errors to $PROGERR here, leaving stdout for $OUTPUT? $OUTPUT = (& myprogram.exe 'argv[0]', 'argv[1]'); if ( $OUTPUT | select-string -Pattern "foo" ) { # do stuff } else { $global:ERRORS += "test(): oh noes! 'foo' missing!"; } } test; if ( […]

具有不可redirect输出的实用程序(Windows)

我正在使用Microsoft命令行实用程序来执行任务。 公用事业的具体细节和执行的任务,我认为是相对不重要的。 这是重要的: 命令行实用程序将文本发送到控制台窗口。 我不知道如何将这个文本redirect到一个文件,尽pipe我已经尝试了所有可以通过研究find的方法。 看来该实用程序正在使用一些奇怪的OS函数调用,导致文本打印方式不受正常的redirect手段。 我正在使用Windows 7 cmd.exe控制台窗口。 这些结构中没有一个redirect有问题的文本输出: util.exe >log.txt util.exe 2>err.txt util.exe >log.txt 2>&1 util.exe 1>log.txt 2>err.txt util.exe 1>log.txt 2>err.txt 3>3.txt 4>4.txt 5>5.txt 6>6.txt 7>7.txt 8>8.txt 9>9.txt 困惑最后一个? 结果发现在Windows-land中有10个输出stream ,但是也没有完成任务。 我可以使用控制台窗口的“编辑”>“标记select和复制”function来复制文本,但是我需要以无头方式捕获该程序的输出,以便自动化。 我无法find任何专门打印到控制台的绕过redirect的OS函数调用。 这样的function是否存在? 这个工具如何设法绕过redirect? 我能用什么方法来捕捉这个工具的输出? 我也试过DbgView,也许这可能包含输出消息,但事实并非如此。 该实用程序不是一个graphics工具。 这显然是一个文本模式程序,可能用C或C ++编写。 它是由微软写的。

Python多处理:我怎样才能可靠地从一个subprocessredirect标准输出?

NB。 我已经看到多处理进程日志输出 – 不幸的是,它不回答这个问题。 我正在通过多处理创build一个subprocess(在Windows上)。 我希望所有的subprocess的stdout和stderr输出都被redirect到一个日志文件,而不是出现在控制台上。 我看到唯一的build议是为subprocess设置sys.stdout到一个文件。 但是,由于Windows上stdoutredirect的行为,这不会有效地redirect所有stdout输出。 为了说明问题,使用下面的代码构build一个Windows DLL #include <iostream> extern "C" { __declspec(dllexport) void writeToStdOut() { std::cout << "Writing to STDOUT from test DLL" << std::endl; } } 然后创build并运行如下所示的Python脚本,该脚本导入此DLL并调用该函数: from ctypes import * import sys print print "Writing to STDOUT from python, before redirect" print sys.stdout = open("stdout_redirect_log.txt", "w") print "Writing to […]