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());
ничего не выводит!
EDIT: Любопытно, что cmd="netsh dump";
на самом деле выводит нормально, а cmd="netsh dhcp server...
- нет. Что-то странное с тем, как CMD маршрутизирует текст netsh или... что-то в этом роде? Здесь вне моей зоны комфорта.
EDIT: это, очевидно, проблема за пределами C++, потому что, когда я нахожусь в оболочке Python 2.7 (кстати, это 64-разрядная версия Windows 7), я пробую это:
>>> 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
>>>
string cmd="netsh dhcp server 192.168.200.15 scope "+scopes[x]+" show clients 1 > out.txt"
вывод в соответствующем файле? - person t7bdh3hdhb   schedule 30.09.2013