2017-02-14 4 views
0

Я хочу написать в std::cerr или std::cout с моим приложением MFC. В сценарии python я вызываю это приложение, и я хочу читать от stdout или stderr. Оба не работают. Просто использование std::cout не дает выхода. После AllocConsole() я, по крайней мере, мог печатать на консоли отладки. К сожалению, на сайте python по-прежнему нет выхода.Запись в стандартный вывод с MFC и чтение stdout by python Popen

В моем MFC приложении я инициализировать консоль, чтобы написать этот код:

void BindStdHandlesToConsole() 
{ 
    // Redirect the CRT standard input, output, and error handles to the console 
    freopen("CONIN$", "r", stdin); 
    freopen("CONOUT$", "w", stdout); 
    freopen("CONOUT$", "w", stderr); 

    std::wcout.clear(); 
    std::cout.clear(); 
    std::wcerr.clear(); 
    std::cerr.clear(); 
    std::wcin.clear(); 
    std::cin.clear(); 
} 

// initialization 
BOOL foo::InitInstance() 
{ 
    // allocate a console 
    if (!AllocConsole()) 
    AfxMessageBox("Failed to create the console!", MB_ICONEXCLAMATION); 
    else 
    BindStdHandlesToConsole(); 

На сайте питона, я пытаюсь напечатать вывод.

process = subprocess.Popen(args,stdout=subprocess.PIPE,shell=True)  
output = process.stdout.read() 
process.wait() 

Есть ли способ сделать мою программу MFC действительно писать, а скрипт python читать стандартный вывод?

+0

Попробуйте установить 'STDERR = subprocess.PIPE', а затем с помощью' (выход, ошибка) = process.communicate() ' без 'read()' и '.wait()'. – cdarke

+0

Еще нет вывода :( – dgrat

+0

Вы тестируете 'output' и' error'? – cdarke

ответ

0

Правильный способ написания материала на стандартный вывод трубы состоит в следующем:

HANDLE hStdOut = GetStdHandle (STD_OUTPUT_HANDLE); 
WriteFile(hStdOut, chBuf, dwRead, &dwWritten, NULL); 

 Смежные вопросы

  • Нет связанных вопросов^_^