2014-01-30 44 views
3

我有一個由我們的程序員編寫的可執行文件(人臉識別),他們不再和我們一起工作。它接受一個命令行參數並將結果打印到STDOUT中。如何從Python運行可執行文件?

我需要能夠在Python利用這一點,但性能是很重要的,所以我不知道我是否應該只使用subprocess。我需要捕獲程序的輸出,因此修改代碼以使其成爲C++庫並在Python中爲它編寫包裝是更好的主意?與使用子流程相比,這會如何影響性能?

我已經查看了Python文檔中運行的C代碼,發現this但答案here是不同的。第二種方法甚至不使用Python.h,所以我有點困惑。在績效非常重要時,做我需要的最好方法是什麼?

+1

爲什麼downvote和爲什麼是C++標記刪除時,這正是wha我在問嗎? – Crypto

+0

執行或庫導入函數,決定! Removed [tag:C++]標籤到目前爲止沒有downvote ...) –

+2

@πάνταῥεῖ:是的,Crypto需要決定,但這不是downvote的理由。在這種情況下,我不認爲您的編輯或重新標記是有保證的。 –

回答

3

首先我要告訴你,我覺得子方法和運行從STD輸出外部應用程序和讀取輸出將是緩慢和不可靠的。我不會推薦這種方法。

相反,這裏是一些建議:

  • 您可以創建在C或C++ Python擴展,你可以在網上找到大量的資源了。因此,您可以將當前代碼轉換爲Python擴展格式,只需使用Python擴展框架模板,將其中的函數和代碼集成在其中,並且您將擁有一個Python擴展,只需從Python代碼中調用它即可。請參閱:http://docs.python.org/2/extending/index.html

  • 將當前的C++代碼直接轉換爲DLL,並導出要從Python調用的代碼的函數(如果您在Windows中)或者在使用Linux時將其簡單地轉換爲共享庫。它將被編譯爲.so。然後你可以在你的Python代碼中調用函數作爲外部庫。例如與解釋:http://www.linuxforu.com/2010/05/extending-python-via-shared-libraries/

我從來沒有嘗試過,但似乎這些項目可以幫助你與你想要的東西: