3

我试着解释一下情况:

  • 我有一个用 C++ 和 QT 编写的 QT 应用程序。

  • 此 QT 应用程序启动一个在后台运行的单独控制台 C++ 应用程序。

  • 这两个可能使用套接字进行通信,还不知道。

  • 控制台 C++ 应用程序需要启动和停止我的 gnuradio python 脚本。它还需要向它发送参数。

  • 一旦启动,这个 gnuradio 脚本在无限循环中独立运行,可能使用套接字将信息发送到控制台或 QT 应用程序。

  • 当 QT 应用程序给出命令时,我的控制台应用程序需要停止运行此 gnuradio 脚本。

问题是如何从我的 C++ 控制台应用程序中停止这个单独的 python 脚本?还有什么我可以做的让这更简单吗?

问候,

斯皮茨

4

3 回答 3

2

套接字,或者你可以使用DBUS pythonDBUS c++,如果你想成为免费桌面:D

于 2010-01-11T09:14:55.623 回答
2

使用 fork() 和 execv() 将 python 脚本作为新进程生成。execv()(或 exec 系列的任何其他函数)允许您将参数传递给 Python 脚本。完成 Python 脚本后,使用子进程 ID 发送终止信号。

于 2010-01-11T09:16:06.167 回答
0

对于您的 C++ 程序,您可能想看看这里:

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

它为您提供了创建和终止外部进程的基本代码。请记住,启动 python 脚本意味着调用 python bin 并将脚本作为第一个参数。

您的 C++ 应用程序和 python 脚本之间的通信可以通过命名管道进行

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

但 DBUS 也可以工作。

我的建议是:

1) 使用 QT 的优点从您的 QT 应用程序启动您的 C++ 应用程序。您可以让这两个通过标准 I/O 重定向进行通信(取决于或您真正想要做什么)

2)按照上面给出的示例从您的 C++ 启动您的 python 脚本。而这两者通过 DBUS/Socket/Pipes 进行通信。

应该做的伎俩

于 2010-01-11T11:09:01.277 回答