Visual Studio 2010 を使用して Windows コンソール アプリケーションを開発しています。これは、最後の数字が現在の数字で上書きされるように画面に進行状況のパーセンテージを出力します。私は次のようにこれを達成するためにキャリッジリターンを使用しています:
std::wcout
<< "[Running: "
<< std::setw(3)
<< std::setprecision(3)
<< percent
<< "%]"
<< '\r'
;
PSSesion を使用してリモート ホストで PowerShell を介してこのプログラムを実行すると、次のようになります。
Enter-PSSession WWW.XXX.YYY.ZZZ -credential <UserName>
[WWW.XXX.YYY.ZZZ]: PS C:\> .\test.exe
PowerShell または cmd.exe でローカルに実行された場合とは動作が異なります。次の3つの問題に直面しています。
[Running xx%]
1) プログラムのコンソール出力は、次の行の出力を次のように上書きするのではなく、次のように異なります。
[Running 1%]
[Running 2%]
[Running 3%]
[Running 4%]
...
これは、プログラムの出力がファイルにリダイレクトされた場合 (単独carriage returns
または+の組み合わせnewlines
で置き換えられた場合) に似ています。carriage returns
newlines
2) プログラムが cout に何かを書き込んだときに、出力が表示されません。実行の最後に一気にやってくる。powershell はリモート プログラムの出力をキャッシュし、呼び出し元に 1 回だけ送信しますか? 2 つの行 (行は 2 つの間のすべての出力を意味するnewline
) の間に大きな時間差がある場合、最初の行は次の行をしばらく待機するかのように出力されnewline
、受信された場合は、特定の時間内に受信されない場合、再び待機状態になります。期間(〜500ミリ秒)、最後までの出力newline
(累積されたすべての出力ではありません)を呼び出し元に送信します。私のコードからわかるように、最後newline
にすべてが[Running xx%]
一度に印刷されることはありません。
3) プログラムのある時点で、ユーザーの確認が必要ですが、リモート実行でcin.fail()
戻ります。true
では、そのような実行環境でユーザー入力を取得する方法はありますか? または、プログラムが Powershell を介してリモートで実行されていることを検出する方法はありますか (たとえば、いくつかの環境変数)?
任意の点に関連するヘルプは大歓迎です。:)