2012-07-11 10 views
5

Bir alt yordam kullanılarak çalıştırılan bir C++ programında bir dizi yazdırma ifadesinden veri okumaya çalışıyorum.Strolut yönlendirmesi olan Python altişlemi bir int dönüyor

C++ kodu:

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 kodu: Ancak

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

yerine veri alma, ben alıyorum hepsini tek int, çıkış kodu, ya bir 0 veya bir hatadır kodu. Tabii ki, python bana "AttributeError: 'int' nesnesinin 'iletişim kuramaz' özelliğine sahip olmadığını söyler.

Verileri (printf) nasıl edinebilirim?

cevap

4

subprocess.call10 sadece komutu çalıştırır ve çıkış durumunu döndürür (python'da çıkış durumu sys.exit(N) ile ayarlanabilir - Diğer dillerde çıkış durumu farklı yollarla belirlenir). İşlem üzerinde gerçekten bir işlem yapmak istiyorsanız, subprocess.Popen'u kullanmanız gerekir. Yani, örneğin:

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

programları çıkış durumu returncode özelliğiyle artık kullanılabilir. do

Ayrıca, stil meselesi olarak, yapardım ya:

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

ya:

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

kendinize stderr'yi yakalama yeteneği vermiyorsun yana, muhtemelen 'olmamalı Anlamlı bir şey aldığın gibi davran.

İlgili konular