gpt4 book ai didi

带有 stdout 重定向的 Python 子进程返回一个 int

转载 作者:太空狗 更新时间:2023-10-30 01:16:43 24 4
gpt4 key购买 nike

我正在尝试从使用子进程运行的 C++ 程序中的一组打印语句中读出数据。

C++代码:

printf "height= %.15f \\ntilt = %.15f \(%.15f\)\\ncen_volume= %.15f\\nr_volume= %.15f\\n", height, abs(sin(tilt*pi/180)*ring_OR), abs(tilt), c_vol, r_vol; e; //e acts like a print

Python代码:

run = subprocess.call('Name', stdout = subprocess.PIPE, env={'LANG':'C++'})
data, error = run.communicate()

然而,我得到的不是数据,而是一个整数,退出代码,0 或错误代码。当然,python 然后告诉我“AttributeError: 'int' object has no attribute 'communicate'”。

我如何实际获取数据(printf)?

最佳答案

subprocess.call只需运行命令并返回其退出状态(在 python 中,退出状态可以通过 sys.exit(N) 设置——在其他语言中,退出状态由不同的方式确定)。如果您想要真正掌握流程,则需要使用 subprocess.Popen。因此,对于您的示例:

run = subprocess.Popen('Name', stdout = subprocess.PIPE, env={'LANG':'C++'})
data, error = run.communicate()

程序退出状态现在可通过 returncode 属性获得。

此外,作为风格问题,我会这样做:

run = subprocess.Popen('Name', stdout = subprocess.PIPE, stderr = subprocess.PIPE, env={'LANG':'C++'})
data, error = run.communicate()

或:

run = subprocess.Popen('Name', stdout = subprocess.PIPE, env={'LANG':'C++'})
data, _ = run.communicate()

既然你没有给自己捕获 stderr 的能力,你可能不应该假装你得到了一些有意义的东西。

关于带有 stdout 重定向的 Python 子进程返回一个 int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11434515/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com