2011-09-29 9 views
5

Chcę zadzwonić do programu (.exe), który jest napisany w C++ i skompilowany, z Pythona. Plik wykonywalny przyjmuje jako dane wejściowe dwa pliki i zwraca wynik.Zadzwoń do zewnętrznego programu z Pythona i uzyskaj jego wyjście.

Potrzebuję zrobić to dla wielu plików. Tak więc chciałbym napisać mały skrypt w pythonie, który pętli na wielu plikach, przekazuje je do pliku wykonywalnego i zwraca wartości.

Teraz zrobiłem moje poszukiwania i wiem o SWIG i Boost :: Python może być opcją, ale próbowałem znaleźć, czy jest łatwiejszy sposób. Nie muszę "rozszerzać" programu C++. Po prostu chcę to nazwać tak, jakbym zrobił to z linii poleceń i uzyskałem zwracaną liczbę.

+1

Wypróbuj to pytanie: http://stackoverflow.com/questions/2919783/python-calling-a-non-python-program-from-python – TorelTwiddler

+0

@TorelTwiddler to nie to, co chce zrobić - ta odpowiedź po prostu zwraca kod powrotu, a nie wynik programu. – agf

+0

Poprawny duplikat to [Co jest dobrym odpowiednikiem podprocesora .piec_procesora pythona, który zwraca zawartość standardowego wyjścia?] (Http://stackoverflow.com/questions/2924310/whats-a-good-equivalent-to-pythons-subprocess- check-call-that-return-the-conte) – agf

Odpowiedz

5

Aby uruchomić zewnętrznego programu i uzyskać jego wyjście, użyj subprocess.check_output na Python 2.7+. W przykładzie z docs:

>>> subprocess.check_output(["ls", "-l", "/dev/null"]) 
'crw-rw-rw- 1 root root 1, 3 Oct 18 2007 /dev/null\n' 

check_call prostu zwraca kod powrotu z programu, a nie wyjście.