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

是否有附加到标准输出的缓冲区大小?

我试图find一些有关Windows上stdout的数据限制的信息。 我似乎无法findMSDN上的信息。 有多less数据可以写入标准输出有限制? 如果是这样,如果达到限制,会发生什么? 数据丢失了吗? 如果stdout被redirect(例如,通过从.Net启动进程并使用ProcessStartInfo.RedirectStandardOutput属性),那么对于可以写入多less数据有什么影响? 当我从调用过程的stdoutstream中读取时,是否会影响限制? 这些限制是否与命名pipe道有关?

用超时和捕捉输出叉subprocess

说我有一个像下面的函数,我如何捕获Process.spawn调用的输出? 如果超过指定的超时时间,我也应该能够终止进程。 请注意,该function也必须是跨平台的(Windows / Linux)。 def execute_with_timeout!(command) begin pid = Process.spawn(command) # How do I capture output of this process? status = Timeout::timeout(5) { Process.wait(pid) } rescue Timeout::Error Process.kill('KILL', pid) end end 谢谢。

用Python 3打印LF到stdout

如何得到\n打印到Windows上的标准输出? 此代码在Python 2中工作,但不在Python 3中工作: # set sys.stdout to binary mode on Windows import sys, os, msvcrt msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY) # the length of testfile created with # python test_py3k_lf_print.py > testfile # below should be exactly 4 symbols (23 0A 23 0A) print("#\n#")

用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