韩城市网站建设,编程培训机构加盟哪家好,济南今天发生的重大新闻,怎么做购物车网站【 声明#xff1a;版权所有#xff0c;欢迎转载#xff0c;请勿用于商业用途。 联系信箱#xff1a;feixiaoxing 163.com】 开发windows和linux软件的时候#xff0c;大家一般都是习惯于用c/c语言进行开发#xff0c;但是目前来说很多的开发板都是支持python语言开发的。…【 声明版权所有欢迎转载请勿用于商业用途。 联系信箱feixiaoxing 163.com】 开发windows和linux软件的时候大家一般都是习惯于用c/c语言进行开发但是目前来说很多的开发板都是支持python语言开发的。这个时候如果不是特别复杂的功能或者说我们已经具备了对应的linux c语言开发库这个时候就完全可以用python来完成windows和linux的通信、以及linux软件的开发。 1、windows和linux的通信 如果是用python开发windows和linux的网络通信这并不是一件很复杂的事情。首先我们需要确定下开发板的python版本接着继续在windows上面安装相同版本的python版本即可比如python3版本这些都做好之后就可以开始脚本的编写了。一般来说windows作为客户端linux作为服务器端。windows的python脚本通常是这样的
# -*- coding:utf8 -*-
import socketdef main():host 192.168.0.97port 12345client_socket socket.socket(socket.AF_INET, socket.SOCK_STREAM)try:client_socket.connect((host, port))print(成功连接到服务器)message Hello, Server!client_socket.sendall(message.encode())data client_socket.recv(1024)print(data)except Exception as e:print(连接或通信出现错误)finally:client_socket.close()if __name__ __main__:main()而linux的python版本是这样的
# -*- coding:utf8 -*-
import socketdef main():host 0.0.0.0 # 监听所有可用的网络接口port 12345 # 选择一个未被占用的端口server_socket socket.socket(socket.AF_INET, socket.SOCK_STREAM)server_socket.bind((host, port))server_socket.listen(1) # 同时监听一个连接print(f等待客户端连接在 {host}:{port} ...)while True:client_socket, client_address server_socket.accept()print(f成功接收来自 {client_address} 的连接)data client_socket.recv(1024)print(f从客户端接收到的数据: {data.decode()})message Hello, Client!client_socket.sendall(message.encode())client_socket.close()endserver_socket.close()if __name__ __main__:main() 这样有了tcp client端和tcp server端两者就可以进行通信处理了。 2、扩展linux端python的功能 前面我们谈到过python自身提供的功能不一定符合我们自己的要求。所以这个时候我们一般还需要开发一个算法库。但是算法库本身是没有办法被python直接访问的所以通常还需要按照python的格式重新对一下接口才能被python语言使用。假设有一个example_module.c文件它的代码是这样的
#include Python.hstatic PyObject *example_function(PyObject *self, PyObject *args) {// C 函数的实现return Py_BuildValue(s, Hello from C!);
}static PyMethodDef methods[] {{example_function, example_function, METH_NOARGS, Example function},{NULL, NULL, 0, NULL} // 结尾标志
};static struct PyModuleDef module {PyModuleDef_HEAD_INIT,example_module,NULL,-1,methods
};PyMODINIT_FUNC PyInit_example_module(void) {return PyModule_Create(module);
}接着把这段代码进行编译可以直接用树莓派4b自带的编译器进行编译
gcc -o example_module.so -shared -fPIC $(python3-config --cflags) example_module.c最后尝试一下直接在python脚本里面调用这个动态库文件
import example_moduleresult example_module.example_function()
print(result)如果能够看到这样的打印那么代表整个处理的流程是没有问题的