2012-06-20 35 views
5

Tôi muốn thực thi mã helloword.cpp, trong đó có một số đối số từ giao diện điều khiển phân tích cú pháp các đối số đó và sau đó in "hello world" trong bảng điều khiển.chạy mã c + + từ python

Bây giờ, tôi muốn phân tích những lập luận từ một kịch bản python parsearguments.py

Vì vậy, ví dụ:

def parse_arguments: 
    ...# some code 
    return arguments 

Bây giờ, làm thế nào để tôi giao tiếp giữa trăn và C++. Tôi đã đọc và thấy rằng cython, tăng python là các tùy chọn nhưng tôi có một thời gian khó tìm kiếm ví dụ đơn giản chào thế giới đơn giản.

Mọi đề xuất sẽ được đánh giá cao. Cảm ơn

+5

Một không thực thi mã nguồn C++. –

+0

Giải pháp của bạn không tốt với tôi, nhưng có thể tôi thiếu một số ngữ cảnh. Tại sao bạn quyết định phân tích đối số bằng Python ngay từ đầu? –

+0

@Grigory: Tôi đang sử dụng một trong các khung viết bằng C++ trong khi tôi chủ yếu sử dụng python ... Hiện tại, tôi thu thập dữ liệu đầu tiên và suy ra điều gì đó từ python ..và sau đó suy luận đó là cần thiết để truyền cho khung công tác C++ đó. Hiện tại, tôi đang lưu mọi thứ trong một tệp văn bản ở bước trung gian và sau đó đọc tệp đó tới C++ nhưng tôi muốn tích hợp chúng lại với nhau .. cách tốt nhất để làm điều này là gì. Cảm ơn – Fraz

Trả lời

5

Làm cách nào để chuyển bất kỳ văn bản nào bạn tạo bằng Python vào đầu vào chuẩn của chương trình C++? Về cơ bản, bạn phải sử dụng mô-đun subprocess của Python để kích hoạt chương trình C++ và đổ văn bản vào đầu ra tiêu chuẩn của Python.

Trong trường hợp chương trình C++ của bạn được yêu cầu chạy riêng trong nền, bạn có thể thử một dạng giao tiếp liên bộ khác, chẳng hạn như ổ cắm miền unix.

Sử dụng tăng :: python cũng là một tùy chọn, nhưng có thể khó xử lý hơn một chút.

6

Để thực thi mã C++ trong python, bạn có thể sử dụng hiệu quả mã tăng trăn, đây là hướng dẫn: http://www.boost.org/doc/libs/1_59_0/libs/python/doc/index.html Bạn viết một loại trình bao bọc bên ngoài mã C++.

Nếu đó là mã C, python có thư viện nội bộ được gọi là ctypes.

Trong cả hai trường hợp, bạn nên biên dịch mã C/C++ thành thư viện được chia sẻ.

1

Sử dụng âm thanh boost.python như một giải pháp tốt cho tôi. Nhưng tùy thuộc vào trải nghiệm C++ của bạn, điều này có thể khá phức tạp. Một điểm tốt để bắt đầu là ở đây:

http://wiki.python.org/moin/boost.python

Boost.Python cho phép bạn xuất các lớp học C++ và hàm thành viên để Python để có thể sử dụng chúng từ đó.

2

Một vài tùy chọn khác ngoài Boost.python là SIP và SWIG (Trình đơn giản hóa và Trình tạo giao diện). Giống như Boost, SIP và SWIG là mã nguồn mở.

SWIG đặc biệt mạnh mẽ, nhưng cũng có một chút lông. Nó cung cấp hỗ trợ cho interfacing C và C + + với một boatload của các ngôn ngữ khác bao gồm (không phải là một danh sách đầy đủ) Python, Perl, Lua, Tcl/Tk, Ocaml, Ruby, Java. Một khía cạnh của SWIG là nó phân tích các tiêu đề C++ của bạn. Điều này có lợi ích và cạm bẫy. Một lợi ích là nó làm hầu hết công việc tạo ra các giao diện. Một nhược điểm là nó không xử lý một số các góc tối của C++ 2003, và nó đã không bước lên đến C++ 11 ở tất cả. Một nhược điểm khác là việc biên soạn một dự án lớn trở nên chậm chạp. Rất, rất chậm.