小智..
6
写入后,进程将数据写入不同管道的顺序将丢失。
您无法判断在stderr之前是否已写入stdout。
您可以尝试在数据可用时以非阻塞方式同时从多个文件描述符中同时读取数据,但这只会最大程度地降低顺序不正确的可能性。
该程序应证明这一点:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
import select
import subprocess
testapps={
'slow': '''
import os
import time
os.write(1, 'aaa')
time.sleep(0.01)
os.write(2, 'bbb')
time.sleep(0.01)
os.write(1, 'ccc')
''',
'fast': '''
import os
os.write(1, 'aaa')
os.write(2, 'bbb')
os.write(1, 'ccc')
''',
'fast2': '''
import os
os.write(1, 'aaa')
os.write(2, 'bbbbbbbbbbbbbbb')