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作为文件参数吗?

用Windowsbatch file在文本文件中添加新行

我有一个文本文件,其中有超过200行,我只是想在第4行之前添加一个新行。我正在使用Windows XP。 input前的示例文本文件: header 1 header 2 header 3 details 1 details 2 输出后: header 1 header 2 header 3 <—– This is new line —-> details 1 details 2

Windows控制台程序stdout在使用pipe道redirect时被缓冲

我有一个长期运行的服务器程序(比如程序A),它是用QT / c ++编写的。 该程序是不是很稳定,所以我决定写一个python脚本来重新启动它,如果它崩溃。 问题是程序可能开始失败(如果我给它一个使用中的端口),打印错误,然后挂在那里没有退出,所以我必须监视程序的标准输出,并在失败的启动时杀死它。 这是我的最终代码(呃,其实这是好的,你可以忽略它): self.subp = subprocess.Popen( r'.\A.exe -server %d' % portnum, stdout=subprocess.PIPE, bufsize=1) for line in iter(self.subp.stdout.readline, ''): print(line, end='') 但我发现我不能从subprocess的标准输出读取任何东西,readline方法只是阻止那里,如果我杀了一个进程,python脚本只是退出没有任何输出。 在一开始,我认为这是一个subprocess模块的问题,但经过一些testing,我发现它不是。 如果我用一些其他的Windows控制台程序replaceA.exe命令行,ping -t例如,一切工作正常。 所以我认为这可能是A程序的问题。 幸运的是,我有A的源代码,这里是一个输出处理: printf("Server is starting on port %u\n", Config.ServerPort); if(server->listen()) printf("Starting successfully\n"); else printf("Starting failed!\n"); 经过一些search,我添加fflush(stdout); 到这段代码的末尾,重build程序,现在它工作 所以我的问题是,我还是不明白,原来的A程序代码有什么问题? 不用强制刷新,它可以在程序启动后立即在Windows控制台中正确打印这些string。 为什么在输出上使用pipe道时输出缓冲? 我在标准c实现读取,输出将自动刷新换行,但为什么不在我的情况? 这是一个Windows的问题,或编译器的问题? A程序是用QT / C ++编译的,QT版本是4.7.4(x32),C ++编译器是用QT(GCC […]

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

如果我有用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,但有一些我一般不理解的文件句柄或句柄。 为什么句柄无效?