Articles of stdout

一个进程如何拦截Linux上另一个进程的stdout和stderr?

我有一些脚本应该停止运行,但永远不会停下来。 有什么方法可以找出他们正在写入标准输出和标准错误以可读的方式吗? 例如,我试图做 tail -f /proc/(pid)/fd/1 但那不是真的有用。 无论如何,这是一个长镜头。 任何其他的想法? 因为看到这一点,它本身是非常冗长和不可读的。 注意:我只对他们的输出感兴趣,而不是其他任何东西。 我有能力自己搞清楚其他的事情。 这个问题只关注在启动后访问正在运行的进程的stdout和stderr。

打印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?

擦除linux上的terminal输出

我正在写一个命令行程序,它将有一个状态栏,很像wget。 我面临的主要问题是:如何删除已经发送到stdout / stderr的内容? 我有想法:使用退格字符'\ B'和擦除我已经发送的输出。 这是最好的方法吗? 这是唯一的方法吗? 有没有更好的办法? PS:我不想使用像ncurses这样的东西。 简单的老C请。 谢谢 编辑: 我也可以上去和/或下去吗? 例如:我有10行输出,我想把第三行从Doing ABC做到ABC: Done 。 我怎样才能做到这一点? 另外,任何人都可以发布有关VT102字符的更多细节? 它有什么function? 如果您有任何问题,请发布好的链接。 谢谢

Linux:捕获已经运行的进程的输出(纯C!)

我的情况如下:我有很多小的小玩意儿(非常接近路由器,不完全是,但无论如何,这是不相关的); 他们正在运行一个基于MIPS的Linux发行版。 为了控制它们,可以在那里telnet(通过串行端口),然后向交互式的bash-like shell发出命令,然后写回一些输出。 shell的input和输出都连接到/ dev / ttyAS0。 现在,我想自动化所有这一切,即编写一个程序,它将在gizmo中运行,是一个监听某个端口的小型服务器,可以将任何命令传递给所述shell,捕获shell的输出并将其中继回到谁联系到服务器。 一世: 1)可以在Gizmo里面安装(小,<500KB)程序2)不能修改操作系统,启动脚本,shell,任何东西3)有root权限4)知道如何写SOAP服务器5)知道如何获得一个SOAP消息,将它翻译成一个命令并将其注入到/ dev / ttyAS0中6)不知道如何捕获shell的回复7)知道如何获取shell的回复,将其转换回SOAP消息并回复原始查询者。 所以基本上,问题是6):如何在/ dev / ttyAS0中注入一个string,从而使shell执行它,捕获shell的输出? 我知道 Redirecting Output from a Running Process 也就是说,我知道如果我在箱子里面运行GDB(或者strace),我可以改变shell的stdout,但是我不能在那里安装它 – 它太大了,反正这个方法看起来太像一个黑客了。 所以,总结一下: 如何在不使用gdb或strace的情况下捕获已经运行的进程的标准输出(IN PURE C),而无法访问进程的启动方式? 或者 – 几乎等同于 – 如何捕捉正在写入terminal的内容,IN PURE C?

Linux – 将命令的STDOUT发送到RSS源

我正在寻找使用个人的RSS饲料的系统报告,所以我想知道是否有可能创build一个脚本,发送其1美元的RSS饲料,ala self_test_command > rss_report.sh 。 我现在还没有设置RSS源,那么设置从Linux机器运行的RSS源最简单的方法是什么?

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

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

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 […]

为什么写入标准输出时WriteFile会崩溃?

这是一个“Hello world”程序,它使用WinAPI的WriteFile(在Microsoft Visual C ++ 2008 Express中编译): int _tmain(int argc, _TCHAR* argv[]) { wchar_t str[] = L"Hello world"; HANDLE out = GetStdHandle(STD_OUTPUT_HANDLE); if(out && out!=INVALID_HANDLE_VALUE) { WriteFile(out, str, sizeof(str), NULL, NULL); CloseHandle(out); } return 0; } 如果在控制台窗口中执行,它会愉快地迎接世界。 如果你尝试redirect它的标准输出,但是,如 hello.exe > output.txt 该程序崩溃在WriteFile(NULL指针exception)。 尽pipe如此,output.txt存在并且包含完整的正确输出。 崩溃时的调用堆栈: KernelBase.dll!_WriteFile@20() + 0x75 bytes kernel32.dll!_WriteFileImplementation@20() + 0x4e bytes srgprc2.exe!wmain(int argc=1, wchar_t […]

执行一个进程并在VC ++中返回它的标准输出

什么是最简单的方法来执行一个进程,等待它完成,然后返回它的标准输出作为一个string? 有点像在Perl中的backtics。 不寻找一个跨平台的东西。 我只需要最快的VC ++解决scheme。 有任何想法吗?