You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python脚本中通过subprocess.check_output()获取C++ main返回值

获取C++程序返回值并忽略标准输出

问题场景

C++程序代码

int main(){
 int x =7;
 std::cout<<"print num:"<<x<<std::endl;
 if(x>0){
  std::cout<<" good"<<std::endl;
  return 5;
 }
 return 0;
}

Python调用代码

result0_1 = subprocess.check_output(MYCPP_fILE_PATH,shell =True)
print(result0_1.decode("utf-8"))

当前执行后只能获取到C++程序的std::cout输出(print num:7和 good),无法拿到main函数返回的5,需要实现只获取返回值、忽略标准输出的效果。

解决方案

核心思路

subprocess.check_output的作用是捕获子进程的标准输出,而非返回值。要获取返回值,需使用subprocess.run,同时通过重定向丢弃标准输出。

修改后的Python代码

import subprocess

# 执行C++程序,丢弃标准输出
proc_result = subprocess.run(MYCPP_fILE_PATH, shell=True, stdout=subprocess.DEVNULL)
# 提取返回值
print(proc_result.returncode)

补充说明

  • 若需处理标准错误输出,可添加stderr=subprocess.DEVNULL参数直接丢弃,或设置为subprocess.STDOUT合并到标准输出(如果需要保留的话)。
  • 如果希望子进程返回非0码时触发异常,可以添加check=True参数,此时可通过CalledProcessError异常对象的returncode属性获取返回值:
try:
    subprocess.run(MYCPP_fILE_PATH, shell=True, stdout=subprocess.DEVNULL, check=True)
except subprocess.CalledProcessError as e:
    print(e.returncode)

内容的提问来源于stack exchange,提问作者Nagarjun Vinukonda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 14:41:27