Net控制Git exe程序互動遇到的問題?

時間 2022-01-12 18:54:43

1樓:

你其實不用去重定向,作為 git程序的爸爸, 你這個程序的控制台的輸入輸出會被 git 繼承,你其實不用這麼麻煩,只需要啟動程序後執行 process.WaitForExit(); 就行了.

預設情況下,git 會使用 isatty 檢測是否是終端,然後決定是否輸出進度,當你重定向 io 後, 實際上是寫入到管道了,所以進度不會輸出,當使用 --progress 時,進度是強制的了,就不關心 isatty.

在 Windows 中是控制台,也就是字元裝置,或者是 mintty 之類的終端模擬器, linux 是 tty.

下面是 .Net Core 實現的.

using

System

;using

System.Diagnostics

;namespace

GitClone

process

.StandardOutput

.BaseStream

.CopyToAsync

(Console

.OpenStandardOutput

());

process

.StandardError

.BaseStream

.CopyToAsync

(Console

.OpenStandardError

());

process

.WaitForExit

();if

(process

.ExitCode!=0

)");}}}}

2樓:藍形參

為什麼進度條在 standard error 輸出呢?

首先,乙個經典的 UNIX 終端進度條一般是這麼做的:

fprintf

(stderr

,"%d/%d\r"

,current

,total

);//

也有輸出的"\r

%d/%d"

,效果差不多但細節略有區別,讀者可以自己思考。

比如一開始先輸出0/100\r,這時候終端內容是

0/100

-注意0下面的減號表示游標的位置,由於終端接收了\r之後游標移動到行首。

下次輸出1/100\r的時候就會把0/100蓋掉,並且游標又回到行首。如此反覆,就會看到進度在跑。

然而 C 標準庫預設行為是對stdout的行為做行緩衝,stderr不緩衝。

也就是說,僅當stdout的 buffer 滿了,或者出現了\n,buffer 的內容就才會被 flush,你才能在終端上看到。而stderr不緩衝,寫入任何字元都會立刻在終端看到。

如何評價 AMD 新版驅動控制中心從 NET 轉向 Qt 使用體驗大幅度提公升?

深紅新介面就是比ccc流暢得多,果然在知乎一扯到微軟就捅馬蜂窩了,農企 可悲的驅動狀況 在用了qt以後至少介面流暢度提高了很多,軟粉大v們強行轉移火力噴一波的功力還真是爐火純青。 從我這一年多寫Qt,之前兩年寫WPF來看,AMD真的快要倒閉了。Qt這麼大的坑都敢跳,以前用WPF寫驅動介面都把驅動寫這...

為什麼很多做 NET 或者大學裡學 NET 的,對任何微軟或 NET 的批評非常敏感

理想 沒有吧,題主取樣太小。NET經常被說大家已經習慣了吧,而且很多批評確實有理有據,MS也在不斷的改進,看看http asp.net mvc 6就明白了。用適合自己的工具把事情能給做出色,這些才是重點。 自己辛辛苦苦全心全意學了好久鑽研了好久的東西被別人罵得一無是處換誰都會發飆的。目測題主應該是剛...

如何評價 NET 5

Eleven 天亮了。好多好多想說的,但又覺得泛泛而談,晚了十多年,希望一切都是最好的安排。NET骨灰粉,期待.NET6 NET7持續高光,重鑄輝煌! UI如果可以直接基於圖形API自繪,而不是呼叫平台UI API,會有質的突破.Direct3D換個OpenGL或Vulkan應該沒什麼難度,估計就是...