如何从Linuxos中的Python脚本运行/停止C程序
How to run/stop c program from a python script in LinuxOS?
我有一个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。
相关文章:
- 如何使用 ctypes 停止和重新启动从 Python 运行的C++代码
- 为什么我的代码在指针方面停止运行?
- 如何正确停止运行非循环QThread?
- 程序在 Visual Studio 中停止运行时终止
- 程序停止运行,但未检测到错误
- 如何在不丢失输出的情况下杀死/停止终端中正在运行的进程?
- 从Raspberry Pi / Linux上的Python脚本运行和停止C++程序
- 如何停止运行该程序?
- 为什么我的程序持续运行而不停止?
- Vscode 自动格式化代码在运行几次后停止工作
- OpenCL仅在循环呼叫时停止运行
- C++随机数生成器通常在 Visual Studio 中运行程序时在 2 次后停止生成数字
- 是否有一种方法可以在运行时停止循环重复一次不止一次
- 停止当前正在运行的线程C
- 运行时停止工作
- 你能用javascript来停止WebAssembly中当前运行的c++吗?
- 停止在线程中运行的类方法
- 每当我尝试运行此代码时,断裂出现或停止工作
- 如何从Linuxos中的Python脚本运行/停止C程序
- 如何以编程方式获取服务的状态(运行/停止)