2017-08-17 44 views
0

我做了一个使用subprocess的python脚本,其中包括将已提交的更改推送到远程git存储库。 这些文件真的推到远程回购,但出于某种原因,我只得到推后出现的git消息的最后一行。从Python推Git不显示完整消息

这里的代码中的相关和平:以下

p = subprocess.Popen('git push --tag origin HEAD:develop' ,stdout=subprocess.PIPE,stderr=subprocess.STDOUT') 
     result = p.communicate()[0] 
     print ("Result from GIT: " + result) 

打印:

Result from GIT: To https://example.org/someUser/repo.git 
    fe4929f6..25bb62e9 HEAD -> develop 
* [new tag]   1.0.1.7 -> 1.0.1.7 

虽然完整的消息,这是我所得到的,当我正在从Windows终端推送:

Counting objects: 25, done. 
Delta compression using up to 2 threads. 
Compressing objects: 100% (23/23), done. 
Writing objects: 100% (25/25), 2.18 KiB | 0 bytes/s, done. 
Total 25 (delta 20), reused 0 (delta 0) 
To https://example.org/someUser/repo.git 
    828b9e31..249be2ba HEAD -> develop 

有没有一种方法,我可以得到完整的信息(这样我可以在我的剧本打印出来)而不仅仅是最后一行?

谢谢

+0

你有相同的结果,如果你重定向错误输出到一个文件,在终端 – coredump

回答

2

当运行git,你需要添加--progress标志。

从GIT中手动当它被连接到末端,除非指定-q(运行git help push

--progress

进展状态报告在默认情况下的标准误差流。即使标准错误流未定向到终端,此标志也会强制进度状态。

这可以被集成到你的程序如下:

p = subprocess.Popen('git push --progress --tag origin HEAD:develop' ,stdout=subprocess.PIPE,stderr=subprocess.STDOUT') 
    result = p.communicate()[0] 
    print ("Result from GIT: " + result) 

注意,使用此标志可以使脚本更难的输出的解析,为混帐的人类可读的输出可能会在未来改变没有警告的git发布。 (使用--porcelain做你的问题的反面,产生机器可读输出总是)

+0

这么简单,谢谢你的家伙。 – Noam