仅在函数执行完成后打印 [重复]

Posted

技术标签:

【中文标题】仅在函数执行完成后打印 [重复]【英文标题】:Print only prints after functions are finished executing [duplicate] 【发布时间】:2015-12-13 13:09:08 【问题描述】:

我有这个代码:

def get_endpoint(type):
    return "%s/%s.json" % (v2_endpoint,type)

def get_entities(type,endpoint=None,entities=None):
    if not endpoint:
        endpoint=get_endpoint(type)
        entities=[]
    r=requests.get(endpoint,headers=header)
    entities.extend(r.json()[type])
    if not 'next' in r.links:
        return entities
    else:
        return get_entities(type,r.links['next']['url'],entities)

print "Fetching info from New Relic....",
servers = get_entities('servers')
applications = get_entities('applications')
print "Done."

我注意到它在处理完这些函数之前不会打印第一个和最后一个打印语句。我猜是预期的行为。

那么,如何让它在开始处理函数之前打印第一行?

【问题讨论】:

它应该打印第一行,向我们展示更多代码。 添加了更多代码@taesu 第一个 print 末尾的逗号使它不会刷新标准输出。 @Community: 不是 How to flush output of Python print 的副本,因为那个是关于冲洗的,而这个是关于在 Python2 中的打印末尾有一个 , 并且没有最后一个带有换行符的 print .虽然冲洗可以通过解决症状来解决这里的问题,但根本原因是不同的。我已经希望 Qs 关于那个逗号的主题了,但是找不到。 【参考方案1】:
print "Fetching info from New Relic....",

尾随逗号表示打印不应在末尾添加换行符。然而,大多数控制台在没有换行符时不会刷新输出,因此在也打印换行符之前您看不到输出。

如果你去掉逗号,你可以看到它会起作用。

但是,您可以手动刷新输出而不打印换行符。但您需要手动执行此操作:

import sys
print "Fetching info from New Relic....",
sys.stdout.flush()

# do stuff
print "Done"

【讨论】:

以上是关于仅在函数执行完成后打印 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

仅在 reloadData 完成后调用函数

仅在最后一项完成后运行jQuery slideDown完成功能[重复]

等待先前的异步功能完成[重复]

ajax怎样再次执行?

vue前端异步与页面渲染问题:怎样让子异步函数完成后页面再渲染

我的数组随机化函数打印相同的数组 [重复]