Python的子进程与标准输出重定向返回一个int(Python subprocess with s

2019-09-19 08:25发布

我试图从一组在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()

然而,而不是获取数据,所有我得到的是一个int,则退出代码,无论是0或错误代码。 当然,蟒蛇,然后告诉我:“AttributeError的:‘诠释’对象有没有属性‘沟通’”。

如何真正得到的数据(printf的)?

Answer 1:

subprocess.call只是运行命令,并返回它的退出状态(在蟒退出状态可以通过设置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()

既然你不给自己捕捉标准错误的能力,你可能不应该假装你得到一些有意义的事。



文章来源: Python subprocess with stdout redirect returning an int