草庐IT

save_stdout

全部标签

c++ - 从 C++ 中的外部程序捕获 stderr 和 stdout

我正在尝试编写一个运行外部程序的程序。我知道我可以捕获stdout,我可以同时捕获stdout和stderr但问题是我可以捕获stderr和stdout分开了吗?我的意思是,例如,变量STDERR中的stderr和变量STDOUT中的stdout。我的意思是我希望它们分开。我还需要在一个变量中的外部程序的退出代码。 最佳答案 在Windows上,您必须为CreateProcess填写STARTUPINFO以捕获标准流,并且您可以使用GetExitCodeProcess函数来获取终止状态。有一个示例如何将标准流重定向到父进程http:

linux - Perl:如何通过 IPC::Open3 重定向的 STDOUT/STDERR fhs

我正在trycatch我的perl代码从打印和类似语句以及外部命令生成的输出。由于设计限制,我无法使用像Capture::Tiny这样的解决方案。我需要在生成输出后立即将其转发到缓冲区变量,并且我需要能够区分STDOUT和STDERR。理想情况下,外部命令的解决方案除了能够捕获STDOUT和STDERR而不是打印它们之外,基本上就像系统一样工作。我的代码应该:保存旧的STDOUT/STDERR文件句柄。为STDERR和STDOUT创建一个新的。将所有输出重定向到这里。打印一些东西。恢复旧的文件句柄。对捕获的输出做一些事情,例如打印出来。但是我无法捕获外部命令生成的输出。我无法使用IPC

c - 通过 ssh 替换并打开 stdin/stdout

我正在开发一个系统,该系统使用到标准输入和标准输出的管道与子进程通信。子进程使用api库来促进这种通信,我需要为该库编写单元测试。我能弄清楚如何正确测试这些函数的唯一方法是用管道替换stdin/stdout,这样测试就可以在调用函数时假装是父系统。/*replacestdinandstdoutwithpipes*/voidsetup(void){pipe(in_sub);pipe(out_sub);dup2(out_sub[1],fileno(stdout));dup2(in_sub[0],fileno(stdin));read_from=fdopen(out_sub[0],"rb")

linux g++ 编译器重定向 stderr 和 stdout 创建空文件

我正在将g++编译器输出(stderr和stdout)重定向到linux上的一个文件。但它正在创建一个空文件。我在其他帖子中读到,stdout并没有在每一行之后刷新。没关系,但是stderr呢?在我的例子中,运行多个屏幕时出现编译错误。所以,我对stderr输出很感兴趣。没有创建标准输出输出。g++-c-I~/cplusplus/boost_1_37_0/boost_1_37_0/-I~/cplusplus/niVxWorksDeliver/TEES/Algorithms.cpp2>output上述命令创建了一个名为“output”的空文件。以下命令报告无效的空命令。g++-c-I~/

c 管道、stdin/stdout 和排序

我正在尝试编写一个程序来fork并发送sort(linux)一些单词来对stdin进行排序,因为没有args的排序将使用stdin。然后从父类中的sort收集标准输出以输出父类的标准输出。目前我的程序挂起。谁能帮我解释一下出了什么问题?我的代码:#include#include#include#include#include#include#includeintmain(intargc,char*argv[]){intfi[2];intfo[2];intoldstdin;intoldstdout;if(pipe(fi)==-1){exit(EXIT_FAILURE);}if(pipe(

c++ - Linux C++ : How do I display my Text application output outside of stdout?

我的目标是创建一个可在Linux终端上玩的游戏。然而,有一个我不知道如何命名的概念,所以我的搜索都是空手而归。像iptraf这样的程序如何在如此低的级别上访问输出,以至于它们可以修改每个单元格的背景、前景和字符内容,以及捕获所有键盘输入而不是shell?我假设某处存在一个二维数组,可以对其进行修改以显示自定义终端窗口内容,但我无法命名这个概念,所以我无法搜索它。我在描述什么概念? 最佳答案 按照thismeta-answer的想法,我正在回答这个问题,这样我就会从“未回答”列表中删除。您正在寻找的概念由@123描述,它称为ncurs

linux - 检测 stdout 是否被重定向到管道(而不是文件、字符设备、终端或套接字)?

理想情况下,这可以在shell中编写脚本,但Perl或Python也可以。C代码可能会有帮助,但可能会失败。我认识到重定向到FIFO(命名管道)可能与真实管道无法区分,这已经足够我不关心的边缘情况了。严格的POSIX解决方案是最好的,与UNIX/Linux变体无关的解决方案次之,但至少我现在需要的是可以在Darwin(MacOSX)上运行的东西。在您写下答案之前-Ialreadyknowabouttest-t-这会告诉我stdout是否是终端(在这种情况下它绝对不是管道-但它不会告诉我stdout是否已被重定向到文件、非终端字符设备或UNIX域套接字而不是管道。预期用例:我有一个命令应

ruby - 连续从子进程中读取 STDOUT 和 STDERR

我正在使用IO.popen来启动一个子进程,但我只得到在子进程运行时(有时是5分钟或其他时间)所发生的一切的结果子进程退出。我真的需要能够在发生时看到子进程写入stderr和stdout的所有内容。到目前为止,我找不到像这样工作的任何东西,但我确信这是可能的。 最佳答案 如果您需要实时获取输出,我建议使用stdlibPTY而不是popen像这样:require'pty'cmd='echoa;sleep1;cat/some/file;sleep1;echob'PTY.spawncmddo|r,w,pid|beginr.syncr.ea

stdout 的 Linux proc/pid/fd 是 11?

使用重定向到文件的标准输出执行脚本。所以/proc/$$/fd/1应该指向那个文件(因为stdoutfileno是1)。但是,该文件的实际fd是11。请解释原因。这是session:$cathello.sh#!/bin/sh-els-l/proc/$$/fd>&2$./hello.sh>/tmp/1total0lrwx------1ngausers64May2822:050->/dev/pts/0lrwx------1ngausers64May2822:051->/dev/pts/0lr-x------1ngausers64May2822:0510->/home/me/hello.sh

c - POSIX 系统上的 `fileno(stdout) != 1` 可能吗?

假设STDOUT_FILENO,stdout文件描述符可以不同于1(stdoutneednotbeamodifiablelvalue)?例如,可以freopen("/dev/null","w",stdout)更改fileno(stdout)结果? 最佳答案 是的。测试程序:#includeintmain(){fclose(stdin);freopen("stdout.txt","w+",stdout);fprintf(stderr,"%d\n",fileno(stdout));return0;}这会在我的机器(OSX10.9.4)上