用MFC写入stdout并用python Popen读取stdout

时间:2017-02-14 14:20:22

标签: python mfc

我想用我的MFC应用程序写入std::cerrstd::cout。在python脚本中,我调用此应用程序,我想阅读stdoutstderr。 两者都不起作用。仅使用std::cout不会产生任何输出。在AllocConsole()之后,我至少能够打印到调试控制台。不幸的是,python网站上仍然没有输出。

在我的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();

在python站点上,我尝试打印输出。

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

有没有办法让我的MFC程序真正写入并且python脚本读取标准输出?

1 个答案:

答案 0 :(得分:0)

将内容写入stdout管道的正确方法如下:

for (SettlementReportNB showSellementReport: settlementReportList) {

    boolean notPresent = false;
    String merchantTxnId = null;
    String merchantreferencenumber = showSellementReport.getMerchantreferencenumber();
    for (AllTransactions showAllTransaction: allTransactionsList) {
        merchantTxnId = showAllTransaction.getMerchantTxnId();
        if (merchantreferencenumber.equals(merchantTxnId)) {
            notPresent = false;
            break; // get out of loop because it already exists
        } else {
            notPresent = true;
        }
    }
    if (notPresent) idNotFound.add(merchantTxnId);
}