Python 不按顺序打印消息
Python prints messages not sequentially
如果我有这个代码
def soft_assert(condition):
if not condition:
print('start')
traceback.print_stack()
print('finish')
soft_assert(False)
soft_assert(False)
每次输出都不一样 运行 它:
File "/Users/spleshakov/Documents/api-testing-with-pytest/tenants/test_uc.py", line 38, in <module>
soft_assert(False, 'message 1')
File "/Users/spleshakov/Documents/api-testing-with-pytest/tenants/test_uc.py", line 30, in soft_assert
traceback.print_stack()
File "/Users/spleshakov/Documents/api-testing-with-pytest/tenants/test_uc.py", line 41, in <module>
soft_assert(False, 'message 4')
File "/Users/spleshakov/Documents/api-testing-with-pytest/tenants/test_uc.py", line 30, in soft_assert
traceback.print_stack()
start
finish
start
finish
或
start
finish
start
finish
File "/Users/spleshakov/Documents/api-testing-with-pytest/tenants/test_uc.py", line 38, in <module>
soft_assert(False)
File "/Users/spleshakov/Documents/api-testing-with-pytest/tenants/test_uc.py", line 30, in soft_assert
traceback.print_stack()
File "/Users/spleshakov/Documents/api-testing-with-pytest/tenants/test_uc.py", line 41, in <module>
soft_assert(False)
File "/Users/spleshakov/Documents/api-testing-with-pytest/tenants/test_uc.py", line 30, in soft_assert
traceback.print_stack()
输出可以是你能想到的任何顺序
这对我来说没有意义,我找不到答案,所以我希望社区可以帮助我解决这些问题:
- 为什么会这样?
- 如何让等待一个
print
完成,然后再做另一个?
谢谢
问题是它默认打印到 stderr
,而不是 stdout
:
# Used by print_stack
def print_list(extracted_list, file=None):
if file is None: # Note here
file = sys.stderr
for item in StackSummary.from_list(extracted_list).format():
print(item, file=file, end="")
您得到乱序输出,因为两个流同时打印到同一个控制台。
指定 file
参数,使其全部打印到同一流:
from sys import stdout
def soft_assert(condition):
if not condition:
print('start')
traceback.print_stack(file=stdout) # Print to stdout
print('finish')
如果我有这个代码
def soft_assert(condition):
if not condition:
print('start')
traceback.print_stack()
print('finish')
soft_assert(False)
soft_assert(False)
每次输出都不一样 运行 它:
File "/Users/spleshakov/Documents/api-testing-with-pytest/tenants/test_uc.py", line 38, in <module>
soft_assert(False, 'message 1')
File "/Users/spleshakov/Documents/api-testing-with-pytest/tenants/test_uc.py", line 30, in soft_assert
traceback.print_stack()
File "/Users/spleshakov/Documents/api-testing-with-pytest/tenants/test_uc.py", line 41, in <module>
soft_assert(False, 'message 4')
File "/Users/spleshakov/Documents/api-testing-with-pytest/tenants/test_uc.py", line 30, in soft_assert
traceback.print_stack()
start
finish
start
finish
或
start
finish
start
finish
File "/Users/spleshakov/Documents/api-testing-with-pytest/tenants/test_uc.py", line 38, in <module>
soft_assert(False)
File "/Users/spleshakov/Documents/api-testing-with-pytest/tenants/test_uc.py", line 30, in soft_assert
traceback.print_stack()
File "/Users/spleshakov/Documents/api-testing-with-pytest/tenants/test_uc.py", line 41, in <module>
soft_assert(False)
File "/Users/spleshakov/Documents/api-testing-with-pytest/tenants/test_uc.py", line 30, in soft_assert
traceback.print_stack()
输出可以是你能想到的任何顺序
这对我来说没有意义,我找不到答案,所以我希望社区可以帮助我解决这些问题:
- 为什么会这样?
- 如何让等待一个
print
完成,然后再做另一个?
谢谢
问题是它默认打印到 stderr
,而不是 stdout
:
# Used by print_stack
def print_list(extracted_list, file=None):
if file is None: # Note here
file = sys.stderr
for item in StackSummary.from_list(extracted_list).format():
print(item, file=file, end="")
您得到乱序输出,因为两个流同时打印到同一个控制台。
指定 file
参数,使其全部打印到同一流:
from sys import stdout
def soft_assert(condition):
if not condition:
print('start')
traceback.print_stack(file=stdout) # Print to stdout
print('finish')