У меня есть программа C++ foobar
которая начинается с main()
а затем поток управления проходит через первую часть, затем вторую часть программы. Если я изменю main
на foobar_main
, я могу скомпилировать всю программу и оболочку SWIG Python в общую библиотеку foobar.so
и импортировать ее в Python, вызывать foobar_main
из Python, и все работает нормально.
Вторая часть связывается с первой с помощью некоторых респектабельных конструкций C++. В частности: первая часть создает некоторые отдельные объекты некоторых классов, а вторая часть использует статические методы класса для получения этих объектов.
Теперь я хочу запустить только первую часть из main()
и вторую часть из Python. То есть, я хочу запустить программу C++ foobar
а затем, после завершения первой части, запустите скрипт Python (программно из C++), который продолжается со второй частью.
Для этого я:
foobar2.so
system("python foobar2.py")
foobar1.so
и загрузить в foobar
foobar2.py
который импортирует foobar1
и foobar2
а затем эквивалентен второй части Затем я пытаюсь запустить foobar
. Это не работает, потому что кажется, что процедуры во второй части жалуются, что определенные шаги, которые должны были быть выполнены в первой части, не выполняются.
Это смущает, но, очевидно, у меня есть некоторые глубокие недостатки в моем понимании того, как работают компьютеры. Может кто-нибудь подскажет мне, чего я не вижу, в том числе, возможно, упрощая вышеупомянутый процесс?
Я собираюсь предположить, что ваш код C++ выглядит следующим образом:
void part1()
{}
void part2()
{}
int main()
{
part1();
part2();
}
И у вас есть версия Python для part2()
которая реализована с помощью некоторых других завернутых функций C++. Если эти допущения ошибочны, дайте мне знать.
Я думаю, что самый простой способ - обернуть part1()
вместе с другими связанными с part2 функциями, а затем создать скрипт Python следующим образом:
import foobar
foobar.part1()
py_part2()
Это, конечно, означает, что программа запускается на Python. Если вам необходимо запустить программу C++ по какой-либо причине (т.е. Вам понадобится main()
), то для использования py_part2()
вам необходимо встроить интерпретатор Python в вашу программу C++. Это гораздо более сложный и сложный процесс, этот ответ имеет хорошую информацию о том, как начать работу.
Поскольку вы system("python foobar2.py")
я объясню, почему system("python foobar2.py")
не работает. В этой схеме ваша программа C++ запускает другой процесс (программу) с именем python
, а затем ждет его завершения. Это две совершенно разные программы, которые в вашем случае не разговаривают друг с другом и не имеют ничего общего. Поэтому почему это не работает.
В общем, пересмотреть все, что связано с system
. Его основное использование, по-видимому, заключается в том, чтобы указать начинающих программистов.