如何从Linuxos中的Python脚本运行/停止C程序

How to run/stop c program from a python script in LinuxOS?

本文关键字:运行 停止 程序 脚本 Python Linuxos 中的      更新时间:2023-10-16

我有一个C程序基本上在无限的While循环中运行。

int main(int argc, char** argv )
{    
     Detectdirection *d;
     //Mosquitto
     io_service io;
     deadline_timer t(io);
     MosquitoInterface *m = new MosquitoInterface(t);

     d = new Detectdirection();      
     while(true)
     {        
        int ret =  d->Tracking();
        if(ret < 0)
           cout << "Pattern is not found" << endl ;
     }  
     delete d;
     delete m;
     cout << "Exit" << endl;
     return 0;
}

我喜欢从Python脚本运行并停止程序。运行程序非常简单。只是为了提供此处讨论的构建文件的路径。

但是如何从Pyhton停止应用程序,以使创建的这些对象正确删除。

您需要在过程之间进行交流。

向过程发送信号(并在可执行文件中捕获该信号)是一种常见的方法。

从Python发送信号:如何终止使用Shell = True

启动的Python子过程

处理信号:信号处理C

另外,您可以使用更高级的技术来发送消息(例如Zeromq了解Zeromq,dbus https://stackoverflow.com/questions/questions/tagged/dbus或com com,com ,com ,dcom,dcom,在哪里开始?)P>

这里的关键字是过程间通信。它有自己的Wikipedia文章https://en.wikipedia.org/wiki/inter-process_communication

您可以使用function os.system()来换取shell scripe。因此,我支持使用下面的代码,该代码将杀伤信号发送到C进程(c过程的名称为"名称":

def processinfo(x):
    p = psutil.get_process_list()
    for r in p:
        aa = str(r)
        f = re.compile(x,re.I)
        if f.search(aa):
            return aa.split('pid=')
os.system('kill -9 ' + processinfo(name))

使用Python的subprocess.Popen而不是便利函数call启动程序。Popen对象具有.terminate()方法,该方法将信号发送到程序,该方法将以受控方式停止程序。该程序在终止方面的行为取决于C程序而不是Python。如果SIGTERM使用signal()记录回调。

可以捕获和处理。

我建议您编写一些测试程序,并在必要时阅读C中的信号处理和Windows。