Т.Л., др - не может захватить выход из команд, которые используют RPC к удаленному серверу, используя любой язык программирования, я стараюсь, даже если эти команды вывода обратно в командную строку при вводе вручнуюC++ Нет сигнала на выходе из POPEN
У меня есть функция, которая использует fpipe для выдачи команды netsh для отображения статистики с нашего DHCP-сервера. Я делаю это тот же метод FPipe буфера чтения в другом месте в моей программе, и она отлично работает, но здесь я не получаю никакого вывода вообще:
EDIT: Я упростить мой код более чек, подтверждающий факт концепт типа фрагмент. Это на самом деле всеохватывающий исходный файл .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.
EDIT: Даже system(cmd.c_str());
не дает мне выхода!
EDIT: Любопытно, что cmd="netsh dump";
фактически выводит хорошо, но до сих пор cmd="netsh dhcp server...
нет. Что-то странное в том, как CMD трассирует netsh текст или ... что-то? Вне моей зоны комфорта здесь.
EDIT: Это, очевидно, проблема вне 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
>>>
Вот что нужно проверить. Нужна ли вам привилегии root? И выполняете ли вы свою программу с соответствующими привилегиями? Пользователь? Права доступа? Как насчет замены netsh на/path/netsh? Правильно ли настроены ваши среды PATH и LIBPATH для cmd? – Bitdiot
Нет, я могу нормально запускать netsh с приглашением неадминистративного CMD и в любом случае запускать программу на C++ в расширенном приглашении cmd. Если переменные пути не были настроены правильно, я бы увидел, что вывод ошибки в STDOUT или STDERR ... плюс также другая команда netsh (netsh dump) действительно выводила нормально. Просто «netsh dhcp ...» не работает. – armani
does 'string cmd =" netsh dhcp server 192.168.200.15 scope "+ scopes [x] +" show clients 1> out.txt "' производить вывод в соответствующем файле? – t7bdh3hdhb