Python 结构在执行命令后显示打印

Python 结构在执行命令后显示打印,python,git,fabric,Python,Git,Fabric,我的git bare repo上有一个post receive挂钩,用于执行以下fabfile.py: def deploy(): print(cyan('Pulling changes to local server')) with cd('/var/www') local('git pull') 它执行得很好,但在打印之前显示本地命令的输出,如下所示: remote: From /media/projetos/repositorios/test remot

我的git bare repo上有一个post receive挂钩,用于执行以下fabfile.py:

def deploy():
    print(cyan('Pulling changes to local server'))

    with cd('/var/www')
        local('git pull')
它执行得很好,但在打印之前显示本地命令的输出,如下所示:

remote: From /media/projetos/repositorios/test
remote:    b057a4b..02d85b3  master     -> origin/master
remote: Updating b057a4b..02d85b3
remote: Fast-forward
remote:  .../test/template/catalog/product/list.phtml     | 98 +++++++++++-----------
remote:  1 file changed, 47 insertions(+), 51 deletions(-)
remote: Pulling changes to local server

如果我只是在服务器上ssh并运行fab deploy,它就会正常工作。

在打印之后添加一个
sys.stdout.flush()
调用,这样即使输出被完全缓冲(就像在管道上一样,在git钩子下运行时一样),它也会在运行另一个命令之前发送到输出流。

谢谢,这确实解决了问题,但如果我添加新的打印语句,每次都必须刷新输出。有没有一种方法可以在每次打印时都不调用sys.stdout.flush()的情况下解决此问题?在执行将直接写入底层stdout的操作之前(例如,如上所述运行另一个命令),您只需
flush
。或者,请参阅相关问题:再次感谢您,我可以通过在文件开头添加
sys.stdout=os.fdopen(sys.stdout.fileno(),'w',0)
来解决此问题。请注意(根据相关问题),此
os.fdopen
将在python 3中引发
ValueError
。您可能希望使用包装器方法,它将在Python2和Python3中工作。