1

考虑以下四行(全部相同),它们从日志文件中产生相同数量的行:

$ zcat test-catalog.xml.gz | bin/process-catalog.py -b build -T 4 - 2>&1 | wc -l
620
$ zcat test-catalog.xml.gz | bin/process-catalog.py -b build -T 4 - 2>&1 | wc -l
620
$ zcat test-catalog.xml.gz | bin/process-catalog.py -b build -T 4 - 2>&1 | wc -l
620
$ zcat test-catalog.xml.gz | bin/process-catalog.py -b build -T 4 - 2>&1 | wc -l
620

现在,考虑完全相同的行,除了不计算来自 stderr 的行,我们计算从 stderr 读取的文件的行:

$ zcat test-catalog.xml.gz | bin/process-catalog.py -b build -T 4 - 2>test.txt ; wc -l test.txt
612 test.txt
$ zcat test-catalog.xml.gz | bin/process-catalog.py -b build -T 4 - 2>test.txt ; wc -l test.txt
617 test.txt 
$ zcat test-catalog.xml.gz | bin/process-catalog.py -b build -T 4 - 2>test.txt ; wc -l test.txt
619 test.txt
$ zcat test-catalog.xml.gz | bin/process-catalog.py -b build -T 4 - 2>test.txt ; wc -l test.txt
617 test.txt

请注意,当我将 stderr 发送到文件时,行数会有所不同。

-T 选项指定无堆栈 python 脚本正在使用的线程数,当我将其设置为一个线程时,我会得到一致的结果。因此,这似乎与可以写入最后一位输出之前完成的某些事情有关。尽管如此,我观察到该脚本实际上每次都完成了它的任务(尽管没有完全记录它)。

我很困惑为什么日志输出会根据我发送标准错误的位置而有所不同。我也很困惑为什么线程数也会影响这一点,尽管脚本完成了它的任务(所以它不会过早结束)。

如果有人能帮助我理解这里发生的事情,我将不胜感激。谢谢!

4

1 回答 1

0

切换到记录到文件,它现在可以工作了。问题解决了。还是有点好奇为什么。

于 2012-12-24T09:12:28.593 回答