我有一个进程myProcess1
,它产生stdout和stderr输出。我想将两个输出流分为两个不同的下游进程myProcess2
和myProcess3
,它们将按摩数据,然后将结果转储到两个不同的文件中。是否可以使用单个命令执行此操作?如果没有,那么第二好的将运行两个单独的命令,一个用于处理stdout
,另一个用于stderr
。在这种情况下,第一次运行只是:
myProcess1 | myProcess2 > results-out.txt
处理stderr
的类似命令是什么? THX
答案 0 :(得分:2)
没有花哨的游戏,这样的事情应该有效:
filepntr1 = fopen(paths[0], "w");
filepntr2 = fopen(paths[1], "w");
filepntr3 = fopen(paths[2], "w");
使用花哨的游戏(在{ myProcess1 | myProcess2 > results-out.txt; } 2>&1 | myprocess3 > results-err.txt
中不起作用等)你可以这样做:
/bin/sh
答案 1 :(得分:1)
一个或两个命名管道可以很好地工作,但你可能会发现最容易使用多个终端窗口。
在一个终端窗口中:
mknod stdout.pipe p
mknod stderr.pipe p
myProcess1 > stdout.pipe 2> stderr.pipe
在第二个窗口中:
myProcess2 < stdout.pipe
还有第三个:
myProcess3 < stderr.pipe
使用后台进程和其他一些技巧,可以在一个窗口中完成所有操作,但保持辅助进程的输出分开将是另一个挑战......
您可以使用以下任一方法消除其中一个命名管道(以及其中一个额外窗口):
myProcess1 2> stderr.pipe | myProcess2
或
{ myProcess1 > stdout.pipe; } 2>&1 | myProcess3