Tôi có một tập lệnh python và chương trình C (tôi đã viết cả hai phần này, vì vậy tôi có nguồn). Tôi cần truyền số lượng lớn dữ liệu từ tập lệnh python gọi nhiều lần chương trình C. Ngay bây giờ tôi cho phép người dùng lựa chọn giữa việc chuyển chúng với tệp ascii hoặc tệp nhị phân, nhưng cả hai đều khá chậm và vô dụng (ý tôi là, tệp hữu ích nếu bạn muốn lưu trữ dữ liệu, nhưng tôi xóa những tệp này ở cuối kịch bản). os.system không hoạt động, các đối số quá nhiều. (chương trình C cũng sử dụng các tệp để trả về dữ liệu cho python, nhưng điều này ít hơn nhiều dữ liệu)Chuyển nhiều mẩu dữ liệu từ chương trình Python sang C
Tôi tự hỏi tôi có thể sử dụng cái gì để trao đổi nhanh chóng. Viết các tập tin vào một đĩa ram? Nếu vậy, làm thế nào tôi có thể làm điều này?
Tôi nghe có thể gọi hàm từ dll bằng cách sử dụng ctypes, nhưng không biết cách biên dịch chương trình của tôi dưới dạng dll (tôi sử dụng wxdevC++ trên win 7 64). Hoặc quấn nó, nhưng vẫn không biết nếu nó có thể làm việc và nếu nó có hiệu quả ..
Ai đó có thể cho tôi biết làm thế nào tôi có thể làm điều này?
(các dữ liệu là đỉnh của một lưới 3d)
EDIT: Có lẽ nhiều infos có thể giúp đỡ. Tôi đang chạy kịch bản python bên trong một chương trình khác (blender (mã nguồn mở)), và được gọi nhiều lần (thường là hơn 500 lần) vì nó nằm trong một chu kỳ. Kịch bản gửi thông tin đỉnh (1 int index và 3 float coords) cho chương trình, và chương trình sẽ trả về nhiều đỉnh (chỉ int index, vì tôi có thể tìm các đỉnh tương ứng với python). Vì vậy, đây không phải là tương tác, nó giống như một hàm (nhưng nó được viết bằng C). Chương trình kịch bản + C (đó là phần bổ sung của máy xay sinh tố) mà tôi đang viết nên là nền tảng chéo bởi vì nó sẽ được phân phối lại (tôi sẽ cung cấp cho các chương trình nguồn và biên dịch). Có lẽ ghi chú này có thể giúp: chương trình thực sự được viết bằng C, và từ python tôi có thể biết địa chỉ trong bộ nhớ của cấu trúc có chứa dữ liệu đỉnh. Nếu chỉ tôi biết làm thế nào để làm điều này, nên tốt hơn để vượt qua để chương trình C chỉ có một địa chỉ, và từ đó tìm thấy tất cả các đỉnh khác (được lưu trữ trong danh sách). Nhưng theo như tôi biết, tôi không thể truy cập vào không gian bộ nhớ của một chương trình khác, và tôi không biết nếu gọi chương trình bằng đường ống hoặc bất cứ điều gì khởi tạo một chủ đề mới hoặc được chạy bên trong kịch bản (đó là thực sự chạy dưới thread Máy xay sinh tố) Ps: here the source và tại đây (3) nên được định nghĩa struct
(3): máy xay sinh tố/nguồn/máy xay sinh tố/makesdna/DNA_meshdata_types.h
tôi đã viết chương trình C, tôi có thể thay đổi cách tôi muốn. Vì vậy, giao tiếp một cái gì đó với đường ống giống như viết trong stdin? –
Nếu tôi hiểu chính xác, vâng. Tôi sẽ đăng một ví dụ chỉ trong trường hợp. – senderle
Ok, tôi gạch dưới mã của bạn. Thật không may tôi sẽ có phân phối lại mã, vì vậy tôi thích sử dụng thư viện chỉ tiêu chuẩn (tôi thấy rằng ngay lập tức là một thư viện extern). Tôi sẽ thử với ống. Và tôi làm phiền bạn nhiều hơn một chút: bạn có nghĩ rằng làm cho một thư viện được chia sẻ và gọi nó với ctypes sẽ làm việc không? Btw thực sự thú vị điều nội tuyến! –