2017-08-17 41 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