为什么添加 tee 会改变输出顺序

Why addition of tee changes order of output

所以这是我的文件结构

|- runit.sh
|- dir1
  |- run.py
  |- test.py

runit.sh 在 dir1 中调用 run.py,dir1 又调用 test.py。

test.py 包含实际测试用例。我面临的问题是当我在 runit.sh 中添加 tee 以将输出捕获到文件时,它改变了输出顺序。我不知道为什么。 让我也把文件的内容。

runit.sh

tests_to_run=" dir1"

for i in $tests_to_run
do
(
        cd $i
        python run.py 2>&1
)
done | tee -a somefile

run.py

import os, sys, subprocess

mypath = os.path.abspath(os.path.dirname(__file__))

tests = [
         'test.py',
        ]

for test in tests:
    print '\n\nRunning test --- %s' % test
    args = ['python', os.path.join(mypath, test)]
    args.extend(sys.argv)
    subprocess.call(args)

test.py

print "this is hello from test1"

现在,当我 运行 使用 runit.sh 进行测试时,我得到以下输出

this is hello from test1
Running test --- test.py

当我从 runit.sh 和 运行 中删除“| tee -a somefile”时,我得到了这个输出 -

Running test --- test.py
this is hello from test1

我从昨天开始就想疯了,但没有运气。

这不是关于 tee

添加

sys.stdout.flush()

之后
print '\n\nRunning test --- %s' % test

简单测试:

:/tmp/test/dir1 $ python run.py
Running test --- test.py
this is hello from test1

同花顺:

:/tmp/test/dir1 $ python run.py | xargs
Running test --- test.py this is hello from test1

没有冲洗:

:/tmp/test/dir1 $ python run.py | xargs
this is hello from test1 Running test --- test.py