Articles of 标准输出

在Linux C中将两个进程的stdoutredirect到另一个进程的stdin

我遇到了有关多进程redirect标准输出的问题。 假设我有进程A,我在A中使用fork(),然后得到进程A和B.然后我在B中使用fork(),最后得到进程A,B和C.B和C都在执行其他程序EXEC()。 现在,我尝试使用两个pipe道将A和B的stdoutredirect到C的stdin。 #include<unistd.h> #include<stdio.h> #include<sty/types.h> int main() { int AtoC [2]; pipe(AtoC); int fd1,fd2; fd1=fork(); if(fd1>0) { /***In process A, I do the following steps: ***/ close(AtoC[0]); dup2(AtoC[1], STDOUT_FILENO); /* program running in process A */ } else { int BtoC [2]; pipe(BtoC); fd2=fork(); if(fd2>0) { /***In process B, I do the following steps: […]

在多个线程/进程之间共享stdout

我有一个Linux程序(语言无关紧要),它打印它login到标准输出。 日志IS需要监视进程。 现在我将通过fork或使用线程来并行化它。 问题:由此产生的标准输出将包含不可读的组合不相关的行… 最后问题:你将如何重构并行进程的输出逻辑?

Linux / Perl:除STDOUT和STDERR以外的其他输出缓冲区?

出于好奇,是否可以创build,实例化或以其他方式访问除了STDOUT和STDERR之外的其他输出缓冲区? 用例可以是input文件或其他命令的附加输出,例如./doublerainbow.pl 3>full_on.txt 4>all_the_way!.txt

将subprocess.Popen中的stdout保存到文件中,并在文件中写入更多内容

我正在写一个Python脚本,它使用subprocess.Popen执行两个程序(从编译的C代码),每个程序生成标准输出。 脚本获取该输出并将其保存到文件中。 由于输出有时足够大以致无法覆盖subprocess.PIPE,导致脚本挂起,所以我直接将stdout发送到日志文件。 我想让我的脚本写入文件的开始和结尾,以及两个subprocess.Popen调用之间。 但是,当我查看我的日志文件时,从脚本写入日志文件的所有内容都集中在文件顶部,其后是所有可执行文件stdout。 我怎样才能交叉我的文字添加到文件? def run(cmd, logfile): p = subprocess.Popen(cmd, shell=True, universal_newlines=True, stdout=logfile) return p def runTest(path, flags, name): log = open(name, "w") print >> log, "Calling executable A" a_ret = run(path + "executable_a_name" + flags, log) print >> log, "Calling executable B" b_ret = run(path + "executable_b_name" + flags, log) print >> […]

whiptail:如何将输出redirect到环境variables?

我试图使用whiptail,因为它是对话框的轻量级替代品,似乎在大多数系统中默认安装(即,如果“忘记”或默认情况下未安装,则人们不必四处安装)。 我在这里检查了问题#1562666的几个例子,但我正在寻找一个替代redirect输出,以便设置一个环境variables,而不是只写入磁盘。 例如,当我尝试与对话框,这个工程(我看到对话框,并设置了一个环境variables): result=$(dialog –output-fd 1 –inputbox "Enter some text" 10 30) echo Result=$result 但是,当使用whiptail代替对话框时,这不起作用,因为对话框从不出现。 我必须将其redirect到磁盘文件并读取它,例如: result=$(tempfile) ; chmod go-rw $result whiptail –inputbox "Enter some text" 10 30 2>$result echo Result=$(cat $result) rm $result 它的工作原理,我可以从头到尾使用相同的临时文件(当脚本结束时删除它)。 但是为了这个而强迫使用磁盘,而不是把它全部保存在内存中(redirect到一个环境variables),感觉很尴尬。 所以我问:我忘记了什么 – 或者当我使用whiptail时真的必须使用磁盘吗? 预先感谢您的反馈。

将stdout作为命令行util的文件名?

我正在使用一个命令行实用程序,它需要传递一个文件的名称来写输出,例如 foo -o output.txt 它写入stdout的唯一信息是表示它已成功运行。 我希望能够将所有写入到output.txt所有内容都pipe理到另一个命令行实用程序。 我的动机是output.txt最终将成为一个40 GB的文件,我不需要保留,而且我宁愿pipestream而不是逐步处理大量文件。 在这种情况下有没有办法将实际输出(即output.txt )pipe道到另一个命令? 我可以以奇迹般的方式将stdout作为文件参数吗?

在程序运行的时候可以获得程序的输出吗?

如果我有用c ++编写的Windows控制台程序,是否有可能在程序运行时检索该程序的标准输出? 如果不是,重写该程序的最好方法是什么? 我知道我可以输出到文件,并不断检查这些文件的更新。 有另一种方法吗? 有没有更好的办法?

为什么在redirect输出时调整控制台缓冲区会引发无效句柄exception?

在将输出redirect到文件时,调整C#控制台应用程序中的Console.BufferWidth会引发exception。 我们来看一个例子test1.exe: static void Main(string[] args) { Console.BufferWidth = 240; Console.WriteLine("output1\noutput2"); } 标准输出很好: test1.exe output1 output2 redirect到文件引发exception: test1.exe > file.txt Unhandled Exception: System.IO.IOException: The handle is invalid. at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) at System.IO.__Error.WinIOError() at System.Console.SetBufferSize(Int32 width, Int32 height) at System.Console.set_BufferWidth(Int32 value) at test1.Program.Main(String[] args) in \\wopr\falken\test1\Program.cs:line 13 很容易忽略使用try … catch,但有一些我一般不理解的文件句柄或句柄。 为什么句柄无效?

Windows上的System.err在哪里?

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

以二进制模式写入标准输出最简单的方法是什么?

我一直在想出从C程序写入二进制数据到stdout的最好方法。 它在Linux上正常工作,但是当我在Windows上编译时遇到了问题,因为“\ n”被转换为“\ r \ n”。 有没有一种标准的方式写入标准输出的某种二进制模式,避免换行符? 如果没有,让Windows停止这个最简单的方法是什么? 我正在使用GCC和MinGW。