2012-07-11 116 views
5

我想从正在使用子进程运行的C++程序中的一组打印语句中读出数据。使用stdout重定向的Python子进程返回一个int

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或错误码。当然,python会告诉我“AttributeError:'int'对象没有'communic'属性。

我该如何获取数据(printf)?

回答

4

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() 

既然你不给自己捕捉标准错误的能力,你可能不该”不要假装你有意义。

相关问题