来自Python的Git Push不会显示完整的消息

时间:2017-08-17 06:47:33

标签: git python-2.7 subprocess

我使用subprocess创建了一个python脚本,其中包括将已提交的更改推送到远程git存储库。 文件确实推送到远程仓库但由于某种原因我只得到推送后出现的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

有没有办法可以获得完整的信息(以便我可以在我的脚本中打印)而不仅仅是最后一行?

谢谢

1 个答案:

答案 0 :(得分:2)

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

从git手册(运行git help push

  

- 进度

     

默认情况下,标准错误流在连接到终端时会报告进度状态,除非指定了-q。即使标准错误流未定向到终端,此标志也会强制进度状态。

这可以按如下方式集成到您的程序中:

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的人类可读输出可能会在未来的git版本中发生更改而不会发出警告。 (使用--porcelain执行与您所要求相反的操作,始终生成机器可读输出