【发布时间】:2020-05-31 20:30:49
【问题描述】:
一个测试程序
#!/usr/bin/env python3
import sys
count = 0
sys.stderr.write('stderr, order %d\n' % count)
count += 1
sys.stdout.write('stdout, order %d\n' % count)
count += 1
sys.stderr.write('stderr, order %d\n' % count)
count += 1
sys.stdout.write('stdout, order %d\n' % count)
当通过终端调用时,预期的输出是,
stderr, order 0
stdout, order 1
stderr, order 2
stdout, order 3
在交互式 shell 中,当我将 stdout 重定向到 PIPE 时,输出顺序与上面的输出顺序不同,其中 Popen 会将 stderr 分组并将它们全部写入,然后对 stdout 执行相同的操作,而不是交错 stdout 和 stderr。
In [29]: a = sp.run(['./test.py'], stderr=sp.STDOUT)
stderr, order 0
stdout, order 1
stderr, order 2
stdout, order 3
In [30]: a
Out[30]: CompletedProcess(args=['./test.py'], returncode=0)
In [33]: b = sp.Popen(['./test.py'], stderr=sp.STDOUT, stdout=sp.PIPE, encoding='utf-8')
In [34]: print(b.communicate()[0])
stderr, order 0
stderr, order 2
stdout, order 1
stdout, order 3
【问题讨论】:
标签: python python-3.x subprocess