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

在cpp中redirect标准输出

我几天前一直在寻找这个问题的答案,希望你们能帮助我。 (我已经search并find了一些解决scheme,但每个都有自己的问题…)。 这是事情:我正在写一个自动化的工作,它负责启动由我的同事编写的代码的外部“.exe”文件。 由于这些程序是写给客户的,所以我不能对其代码进行任何修改。 这些程序一旦启动,正在等待特定的击键,并在收到合法的击键时打印一条消息。 我的目标是:编写一个程序,执行外部程序,发送按键,并从他们的标准输出接收输出。 到目前为止,我已经能够从我的程序(使用ShellExecute)运行程序,并将某种键盘监听器(使用SendMessage)模拟到另一个程序。 我可以看到它的工作原理 – 我可以看到testing程序的控制台中的输出。 我试图在testing程序的shell中实时地获取打印的消息(并在程序终止时获取大量数据),以便在出现问题时对其进行分析。 那些我试过的: 使用内联输出redirect将外部batch file写入文本文件。 使用freopen。 在执行“ShellExecute”的同时redirect输出。

禁用缓冲redirect标准输出pipe道(Win32 API,C ++)

我使用CreateProcess从Win32生成一个进程,将STARTUPINFO的hStdOutput和hStdError属性设置为用CreatePipe创build的pipe道句柄。 我有两个线程读取pipe道,等待数据变为可用(或者进程完成,在此之前它检查在终止线程之前没有剩下数据)。 随着数据变得可用,我将输出写入一个有效的大文本框。 发生什么事是输出被缓冲,所以一个缓慢运行的过程只是获取文本框中的大块数据,而不是“正好发生”。 我不确定是否是进行缓冲的pipe道,或者与redirect有关。 有什么办法可以将pipe道设置为无缓冲的,或者以尽可能快的方式发送标准输出来启动进程? 我正在testing一个testing应用程序,相隔一秒打印行 Here is line one (waits one second) Here is line two (waits one second) … etc

强制另一个程序的标准输出使用Python无缓冲

python脚本正在控制Linux上的外部应用程序,通过pipe道将input传递到外部应用程序stdin,并通过pipe道从外部应用程序stdout读取输出。 问题在于对pipe道的写入是通过块进行缓冲的,而不是通过线路进行缓冲,因此在控制脚本接收到外部应用程序中的printf输出数据之前发生延迟。 外部应用程序不能被改变来添加显式的fflush(0)调用。 Python标准库的pty模块如何与子stream程模块一起使用来实现这一目标?