2017-12-21 6 views
1

私は単純な実行可能ファイルを持っています。これは、コマンドライン引数、単純な初期化、および状態メッセージの確認から始まります。プログラムのローカル実行では復帰しません。リモート実行はしますか?

if (argc != 2) 
{ 
    std::cout << "Must provide IP address as argument.\n"; 
} 

Comms_SSL comms; 
std::string msg; 

std::cout << "Version Number: " << SOME_VERSION_NUM << std::endl; 

マシンから直接実行可能ファイルを実行すると、期待どおり動作します。それはバージョン番号を表示し、プログラムに沿って続けます。

この実行可能ファイルをpsexec経由でリモート実行すると、ツールのバージョンがコンソールに出力された後にプログラムを実行するために、プログラムの実行がキャリッジリターンを待機します。ソースコード内のどの時点でも、どんな種類の入力のためのプロンプトも存在しません。

私は「\ nを」で終了するバージョン番号を出力ラインを変更した場合奇妙なことは、次のとおりです。

std::cout << "Version Number: " << SOME_VERSION_NUM << '\n'; 

私はPSEXECを経由して再びこの実行ファイルを実行すると、プログラムの実行をを待ちTool Versionが表示される前にプログラムを続行するには、キャリッジリターンをコンソールに出力します。

ここで何が起こっているのか分かりません。私はこのプログラムをpsexec経由で実行するには、キャリッジリターンを続行する必要はありません。

+3

キャリッジリターンを送信するまでプログラム自体がブロックされていますか?私はそれが完了するまで実行されるのがより妥当であることがわかりますが、その出力は、あなたが送料を返すまであなたに転送されません。そして、それはすべてのpsexecであり、C++の問題ではありません。 –

+0

出力バッファリングは、出力が端末か他の種類のストリームのどちらであるかによって異なります。 'psexec'は端末をエミュレートしていないので、出力はバッファされているようです。 'std :: endl'はバッファをフラッシュします。 – Barmar

+0

'psexec'のドキュメントを調べて、サーバ上に擬似ttyを取得するオプションがあるかどうか確認してください。 – Barmar

答えて

1

最初にstd::endlの代わりに'\n'を使用すると、出力は同じになりますが、リアルタイムでは表示されません。 std::endl do os.flush()

第2に、私はあなたがhereのようなpowershellを使用していることを想起させるので、よくある問題です。 (該当しない場合は、私はこの投稿を削除します)

stdinにいくつかのデータをパイプすると、実行後に効果的に戻ります。

関連する問題