Лучший способ запустить, остановить и отправить параметры для отделения сценария Python от приложения C ++? - PullRequest
3 голосов
/ 11 января 2010

Я пытаюсь объяснить ситуацию:

  • У меня есть приложение на QT, написанное на C ++ и QT.

  • Это приложение QT запускает отдельное консольное приложение C ++, которое работает в фоновом режиме.

  • Эти двое общаются, используя, возможно, сокеты, пока не знаю.

  • Консольное приложение C ++ должно запускать и останавливать мой скрипт на gnuradio python. Также ему необходимо отправить параметры.

  • После запуска этот скрипт gnuradio работает независимо в бесконечном цикле, отправляя информацию либо в консоль, либо в приложение QT, используя, возможно, сокеты.

  • Моему консольному приложению необходимо остановить запуск этого скрипта gnuradio, когда порядок задан приложением QT.

Вопрос в том, как остановить этот отдельный скрипт Python из моего консольного приложения C ++? Также я могу что-нибудь сделать, чтобы сделать это проще?

С уважением,

Spitz

Ответы [ 3 ]

2 голосов
/ 11 января 2010

Создание скрипта Python как нового процесса с использованием fork () и execv (). execv () (или любая другая функция семейства exec) позволяет передавать аргументы скрипту Python. Используйте идентификатор дочернего процесса для отправки сигнала уничтожения, когда вы закончите со скриптом Python.

2 голосов
/ 11 января 2010

Сокеты, или вы можете использовать DBUS python и DBUS c ++ , если хотите быть полностью свободными от десктопов: D

0 голосов
/ 11 января 2010

Для вашей программы на C ++ вы можете посмотреть здесь:

http://www.codeproject.com/KB/cpp/kill_process.aspx

Это дает вам основной код для создания и уничтожения внешнего процесса. Помните, что запуск скрипта python означает вызов бина python и предоставление скрипта в качестве первого аргумента.

Связь между вашим приложением C ++ и скриптом python может осуществляться через именованный канал

http://en.wikipedia.org/wiki/Named_pipe

но DBUS тоже может работать.

Мой совет:

1) Запустите приложение C ++ из приложения QT, используя доброту QT. Вы можете заставить этих двоих общаться через стандартное перенаправление ввода / вывода (в зависимости от того, что вы действительно хотите сделать)

2) запустите ваш скрипт на Python из C ++, следуя приведенному выше примеру. И эти двое общаются через DBUS / Socket / Pipes.

Должен сделать трюк

...