Python 结构在执行命令后显示打印
我的git bare repo上有一个post receive挂钩,用于执行以下fabfile.py: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
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中工作。