我尝试解释一下情况:
我有一个用 C++ 和 QT 编写的 QT 应用程序。
此 QT 应用程序启动一个在后台运行的单独控制台 C++ 应用程序。
这两个可能使用套接字进行通信,目前还不知道。
控制台 C++ 应用程序需要启动和停止我的 gnuradio python 脚本。它还需要向其发送参数。
一旦启动,这个 gnuradio 脚本就会在无限循环中独立运行,可能会使用套接字向控制台或 QT 应用程序发送信息。
当 QT 应用程序发出命令时,我的控制台应用程序需要停止此 gnuradio 脚本的运行。
问题是如何从我的 C++ 控制台应用程序中停止这个单独的 python 脚本?还有什么我可以做的让这更简单吗?
Sockets,或者你可以使用 DBUS python 和 DBUS c++,如果你想成为全部免费桌面:D
使用 fork() 和 execv() 将 python 脚本生成为新进程。 execv()(或 exec 系列的任何其他函数)允许您将参数传递给 Python 脚本。完成 Python 脚本后,使用子进程 ID 发送终止信号。
对于您的 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 进行通信。
应该可以解决问题