我正在開發使用Visual Studio 2010的Windows控制檯應用程序,該應用程序在屏幕上打印進度百分比,以便最後一個數字被當前數字覆蓋。我使用回車來實現這一目標,像這樣:當我通過PowerShell的遠程主機上使用PSSesion執行這個程序當通過Powershell遠程會話執行時,程序輸出不同
std::wcout
<< "[Running: "
<< std::setw(3)
<< std::setprecision(3)
<< percent
<< "%]"
<< '\r'
;
:
Enter-PSSession WWW.XXX.YYY.ZZZ -credential <UserName>
[WWW.XXX.YYY.ZZZ]: PS C:\> .\test.exe
其行爲有所比較時,其在本地執行在PowerShell或cmd.exe中。我面臨以下三個問題:
1)程序的控制檯輸出不同的是,在那,而不是在下一行覆蓋[Running xx%]
其打印,像這樣:
[Running 1%]
[Running 2%]
[Running 3%]
[Running 4%]
...
這是類似發生了什麼當一個程序的輸出被重定向到一個文件(單獨的carriage returns
或newlines
被替換爲carriage returns
+ newlines
組合)。
2)當程序向cout寫入內容時,輸出不顯示。它在執行結束時立刻出現。 powershell是否會緩存遠程程序的輸出並僅向調用方發送一次?如果兩行之間存在顯着的時間差(線意味着兩個newline
之間的所有輸出),則第一行將被打印,就好像它等待一段時間以等待另一個newline
一樣,如果收到,則它再次進入等待狀態,如果未收到在一定的時間段內(〜500ms),它將輸出發送到最後的newline
(而不是所有的累積輸出)給主叫方。從我的代碼可以看出,沒有newline
導致所有[Running xx%]
在最後一次被打印。
3)在程序中的某一點我需要用戶確認,但cin.fail()
返回true
遠程執行。那麼,有什麼方法可以在這樣的執行環境中接受用戶輸入嗎?或者有沒有什麼方法可以檢測出程序是通過Powershell遠程執行的(例如一些env變量)?
任何與任何問題有關的幫助將不勝感激。 :)
你爲什麼把它標記爲「C++」和「visual-C++」? – Solaflex 2013-05-09 15:03:14
@Solaflex:希望可能有一些可以控制這種行爲的c或C++庫api。 – anni 2013-05-09 15:07:53