如何使用 ctypes 停止和重新启动从 python 运行的 C++ 代码
Posted
技术标签:
【中文标题】如何使用 ctypes 停止和重新启动从 python 运行的 C++ 代码【英文标题】:how to stop and restart C++ code running from python with ctypes 【发布时间】:2020-02-03 16:38:12 【问题描述】:我有一个 C++ 代码,我运行并使用它的 Python 函数。我的问题是 - 如何停止该代码运行(如果它在控制台中,如 ctrl+c)然后重新启动,但只有 c++ 部分,python 的其余部分应该像以前一样工作。
这是我使用 c++ 代码的方式:
from os.path import abspath, dirname, join
fname = abspath(inspect.getfile(inspect.currentframe()))
lib = ctypes.cdll.LoadLibrary(join(dirname(fname), 'shared_lib.so'))
func = lib.func
func.restype = None
func.argtypes= None
有没有办法重新做?
【问题讨论】:
【参考方案1】:您可以添加一个信号处理程序:
import signal
from os.path import abspath, dirname, join
def restart_server():
# Restart code
signal.signal(signal.SIGTERM, restart_server)
fname = abspath(inspect.getfile(inspect.currentframe()))
lib = ctypes.cdll.LoadLibrary(join(dirname(fname), 'shared_lib.so'))
func = lib.func
func.restype = None
func.argtypes= None
此信号处理程序捕获信号 TERMINATE (Ctrl+C) 并调用给定函数。
【讨论】:
以上是关于如何使用 ctypes 停止和重新启动从 python 运行的 C++ 代码的主要内容,如果未能解决你的问题,请参考以下文章
停止重新加载从 iPhone 主屏幕启动的 Web 应用程序