2017-02-14 95 views
0

我想用我的MFC應用程序寫入std::cerrstd::cout。在一個python腳本中,我稱這個應用程序,我想從stdoutstderr讀取。 兩者都不起作用。僅使用std::cout就不會產生輸出。在AllocConsole()之後,我至少能夠打印到調試控制檯。不幸的是,python網站上仍然沒有輸出。使用MFC寫入stdout並通過python讀取stdout 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

嘗試設置'標準錯誤= subprocess.PIPE'以及然後使用'(輸出,錯誤)= process.communicate()'沒有'read()'和'.wait()'。 – cdarke

+0

仍然沒有輸出:( – dgrat

+0

你測試輸出和錯誤嗎? – cdarke

回答

0

寫入東西到stdout管的正確方法如下:

HANDLE hStdOut = GetStdHandle (STD_OUTPUT_HANDLE); 
WriteFile(hStdOut, chBuf, dwRead, &dwWritten, NULL); 
相關問題