2012-07-11 102 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() 

既然你不給自己捕捉標準錯誤的能力,你可能不該」不要假裝你有意義。

相關問題