tl;dr - RPC を使用するコマンドからリモート サーバーへの出力をキャプチャできません。これらのコマンドを手動で入力するとコマンド プロンプトに出力されますが、どのプログラミング言語を試しても取得できません。
fpipe を使用して netsh コマンドを発行し、DHCP サーバーからの統計情報を表示する機能があります。プログラムの他の場所でこれと同じ fpipe バッファー読み取り手法を実行すると、正常に機能しますが、ここではまったく出力が得られません。
編集:コードをより概念実証タイプのスニペットに単純化しています。実際には、問題を再現するすべてが含まれた .cpp ソース ファイルです。
#include <iostream>
#include <string>
#include <stdio.h> // for _popen() and _pclose()
using namespace std;
int main()
{
char buff[512];
buff[0]=0;
string cmd="netsh dhcp server 192.168.200.15 scope 192.168.200.0 show clients 1";
FILE *fpipe = _popen(cmd.c_str(),"r");
if(fpipe==NULL) cout<<"Failed to open"<<endl; else cout<<"Opened pipe successfully";
while(fgets(buff,sizeof(buff),fpipe)!=NULL) cout<<buff<<endl;
_pclose(fpipe);
}
私が得ている唯一の出力は次のとおりです。
Opened pipe successfully
しかし、そのコマンドをコピーして別のコマンド プロンプト ウィンドウに貼り付けると、問題なく実行され、すぐに多くの行が出力されます。
それで、それはどこに行きますか?バッファに何も入らないのはなぜですか?
また、「cmd」文字列を netsh から「dir」コマンドに変更すると、dir の出力が正常に出力されます。
編集:system(cmd.c_str());
出力さえもありません!
編集: 不思議なことに、cmd="netsh dump";
実際にはうまく出力されますが、それでも出力さcmd="netsh dhcp server...
れません。CMD が netsh テキストなどをルーティングする方法に何か奇妙なことはありますか? ここの私の快適ゾーンの外。
編集: これは明らかに C++ 以外の問題です。Python 2.7 シェル (ちなみに、これは Windows 7 64 ビットです) を使用しているときは、次のようにします。
>>> import subprocess
>>> subprocess.call('dir', shell=True)
Volume in drive C has no label.
Volume Serial Number is 2E2B-B34F
Directory of C:\MyDir
09/30/2013 01:24 PM <DIR> .
09/30/2013 01:24 PM <DIR> ..
09/20/2013 10:11 AM 45 test.txt
1 File(s) 45 bytes
2 Dir(s) 162,260,246,528 bytes free
0
>>> subprocess.call('netsh dhcp server 192.168.200.15 scope 192.168.200.0 show clients 1', shell=True)
0
>>>