Làm cách nào để gọi tập lệnh python từ C++?

Python đi kèm với Mac OS X. Nhưng phiên bản mà bạn có rất có thể là phiên bản cũ hơn. Tải xuống phiên bản nhị phân mới nhất của Python chạy trên cả hệ thống Power PC và Intel và cài đặt nó trên hệ thống của bạn

Python là một trong những ngôn ngữ lập trình phổ biến nhất do cú pháp đơn giản, dễ học và hỗ trợ đa nền tảng. Bên cạnh đó, nhiều thư viện và mô-đun Python chất lượng cao có sẵn để bạn tùy ý sử dụng, cho phép bạn thực hiện những công việc nặng nhọc chỉ với một vài dòng mã. Điều này làm cho Python trở thành một trong những cách hiệu quả nhất để phát triển nguyên mẫu. Tuy nhiên, Python không nhanh bằng ngôn ngữ lập trình C và nhiều phần mềm sản xuất quan trọng về hiệu năng như hệ điều hành Linux, máy chủ web và cơ sở dữ liệu được viết bằng C. Nếu bạn đang phát triển một chương trình bằng C, nhưng một số phần của nó cần được viết bằng Python, bạn có thể viết một mô-đun Python cho chương trình đó và nhúng mô-đun Python vào chương trình C bằng API Python/C

Trong hướng dẫn này, hãy kiểm tra cách sử dụng API Python/C để nhúng mã Python vào C. Hướng dẫn sẽ kết thúc với một ví dụ đầy đủ về cách gọi Python từ mã C

Bước 1. Cài đặt gói phát triển Python

Vì bạn cần truy cập API Python/C, trước tiên hãy cài đặt gói phát triển Python

Đối với Ubuntu, Debian hoặc Linux Mint

$ sudo apt-get install python2.7-dev

Đối với CentOS, Fedora hoặc RHEL

$ sudo yum install python-devel

Sau khi cài đặt thành công, tệp tiêu đề Python sẽ được tìm thấy trong

$ sudo yum install python-devel
3. Tùy thuộc vào bản phân phối Linux của bạn, đường dẫn chính xác có thể khác. Ví dụ: nó là
$ sudo yum install python-devel
4 trên CentOS 6

Bước 2. Khởi tạo trình thông dịch và đặt đường dẫn

Bước đầu tiên để nhúng Python vào C là khởi tạo trình thông dịch Python, có thể thực hiện việc này bằng hàm C sau

Py_Initialize();

Sau khi trình thông dịch được khởi tạo, bạn cần đặt đường dẫn đến mô-đun Python mà bạn muốn nhập trong chương trình C của mình. Ví dụ: giả sử mô-đun Python của bạn nằm ở

$ sudo yum install python-devel
5. Sau đó sử dụng lệnh gọi hàm C sau để đặt đường dẫn

PySys_SetPath("/usr/local/modules");

Bước 3. Chuyển đổi dữ liệu

Một trong những khía cạnh quan trọng nhất của việc nhúng Python vào C là chuyển đổi dữ liệu. Để chuyển dữ liệu sang hàm Python từ C, trước tiên bạn cần chuyển đổi dữ liệu từ kiểu dữ liệu C sang kiểu dữ liệu Python. API Python/C cung cấp nhiều chức năng khác nhau để thực hiện điều này. Ví dụ, để chuyển chuỗi C sang chuỗi Python, chúng ta sử dụng hàm

$ sudo yum install python-devel
6

________số 8

Một chức năng tương tự khác là

$ sudo yum install python-devel
7, chuyển đổi kiểu dữ liệu dài trong C thành Python int. Mọi hàm API Python/C đều trả về một tham chiếu thuộc loại
$ sudo yum install python-devel
8

Bước 4. Xác định một mô-đun Python

Khi bạn muốn nhúng mã Python vào một ngôn ngữ khác chẳng hạn như C, mã cần được viết trong một mô-đun Python, sau đó được nhập bằng ngôn ngữ khác. Vì vậy, hãy kiểm tra cách nhập mô-đun Python trong C

Để minh họa, hãy triển khai một mô-đun Python ví dụ đơn giản như sau

$ sudo yum install python-devel
1

Hàm Python ở trên lấy một chuỗi làm đối số và trả về hai lần lặp lại của chuỗi. Ví dụ: nếu chuỗi đầu vào là

$ sudo yum install python-devel
9, hàm này trả về
Py_Initialize();
0. Đặt tên tệp mô-đun này là
Py_Initialize();
1 và đặt mô-đun vào thư mục mô-đun Python đã khai báo trước đó (
$ sudo yum install python-devel
5)

Bước 5. Tải một mô-đun Python

Bây giờ bạn đã xác định mô-đun Python của mình, đã đến lúc tải nó vào chương trình C. Mã C để nhập mô-đun trông như thế này

$ sudo yum install python-devel
6

Bước 6. Xây dựng đối số chức năng

Khi bạn tải một mô-đun, bạn đã sẵn sàng gọi các hàm Python được xác định trong mô-đun. Thông thường, chúng ta cần chuyển một hoặc nhiều đối số cho hàm Python. Chúng ta phải xây dựng một đối tượng bộ Python chứa các đối số cho một hàm Python

Trong ví dụ của chúng tôi, hàm

Py_Initialize();
3 được xác định trong mô-đun của chúng tôi nhận một đối số. Vì vậy, chúng tôi xây dựng một đối tượng Tuple Python với kích thước như sau. Chúng ta có thể đặt từng mục trong đối tượng tuple bằng cách sử dụng
Py_Initialize();
4

$ sudo yum install python-devel
9

Chúng ta đã xây dựng thành công một đối số được truyền trong lệnh gọi hàm, đã đến lúc chúng ta nên gọi hàm python từ ứng dụng C của mình

Bước 7. Gọi một hàm Python

Khi một đối tượng bộ Python được tạo thành công làm đối số hàm, chúng ta có thể gọi hàm Python nhận đối số. Đối với điều này, trước tiên hãy lấy tham chiếu đến hàm được xác định trong một mô-đun bằng cách sử dụng

Py_Initialize();
5, sau đó gọi hàm bằng
Py_Initialize();
6. Ví dụ

$ sudo yum install python-devel
2

Bước 8. Kiểm tra lỗi

Một cách phổ biến để tránh lỗi thời gian chạy là kiểm tra giá trị trả về của hàm và thực hiện hành động thích hợp tùy thuộc vào giá trị trả về. Tương tự như biến toàn cục errno trong các chương trình C, API Python/C duy trì một chỉ báo toàn cầu báo cáo về lỗi cuối cùng đã xảy ra. Khi chức năng API Python/C không thành công, chỉ báo chung được đặt để chỉ báo lỗi và có thể sử dụng

Py_Initialize();
7 để hiển thị một bản ghi lại tương ứng mà con người có thể đọc được. Ví dụ

$ sudo yum install python-devel
4

Bạn có thể dễ dàng kết hợp các kiểm tra lỗi khác nhau bên trong ứng dụng của mình

Đây là chương trình C hoàn chỉnh nhúng mã Python như được mô tả trong hướng dẫn này

$ sudo yum install python-devel
0

Bước 9. Biên dịch và thực thi

Lưu mã trên dưới dạng

Py_Initialize();
8 và biên dịch mã trong khi liên kết với thư viện Python (
Py_Initialize();
9). Tùy thuộc vào distro, bạn có thể sử dụng các phiên bản khác nhau (e. g. ,
PySys_SetPath("/usr/local/modules");
0)

$ sudo yum install python-devel
1

Bây giờ hãy chạy tệp thực thi đã biên dịch với ba đối số

$ sudo yum install python-devel
2

Ba đối số trong bài kiểm tra này là tên mô-đun, tên hàm trong mô-đun, đối số chuỗi được truyền cho hàm Python