如何在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
相关产品推荐
相关产品推荐

