2009-03-02 26 views
8

Tôi đọc Runtime.getRuntime().exec("perl script.pl") là một tùy chọn, nhưng đây có phải là cách tốt nhất để làm điều đó không?Tôi nên gọi một Kịch bản Perl bằng Java như thế nào?

Tôi cần câu trả lời từ tập lệnh đó, vì vậy tôi sẽ phải đọc trả lại của tập lệnh trong một số trường hợp, mặc dù tôi có thể đọc nó từ tệp văn bản trên các trường hợp khác.

Dù sao, là exec() một cách hay để gọi một Tập lệnh Perl từ Java? Tôi nên lưu ý, tôi đang làm việc trên một ứng dụng web Java, vì vậy bảo mật là một vấn đề ở đây.

+0

Câu hỏi tương tự: http://stackoverflow.com/questions/971215/include-perl-in-java –

Trả lời

9

Bạn có thể sử dụng Runtime.getRuntime().exec() hoặc sử dụng Process API. API quy trình cho phép bạn lấy đầu ra của tập lệnh, vì vậy bạn có thể có cả giao tiếp.

exitValue()getInputStream() có vẻ là những gì bạn cần.

+0

Sử dụng mã bên dưới để khi chạy mã Java trên máy Windows: process = r.exec ("cmd/c perl D: \\ perlexamples \\ hello.pl"); –

3

exec() có thể là tùy chọn tốt nhất và bạn có thể nhận được giá trị trả lại của nó bằng exitValue(). Bạn cũng có thể quan tâm đến số Inline::Java.

-John

+0

Có hướng dẫn hay về Inline :: Java at http://perladvent.pm.org/2003/21st/ – daotoad

4

này vạch ra làm thế nào để làm điều đó khá thanh lịch, mặc dù nó có thể có nhiều nỗ lực hơn nó có giá trị: http://search.cpan.org/~nwclark/perl-5.8.9/jpl/docs/Tutorial.pod

Tổng quan:
Vâng hỗ trợ bởi JPL, nhưng nó là một phức tạp quy trình:

Trình xử lý tiền xử lý JPL phân tích tệp .jpl và tạo trình bao bọc mã C cho các phương thức Perl. Nó cũng tạo ra các tệp nguồn Java và Perl.

Trình biên dịch C biên dịch trình bao bọc và liên kết nó với thư viện chia sẻ libPerlInterpreter.so, tạo thư viện dùng chung cho trình bao bọc.

Trình biên dịch Java biên dịch tệp nguồn Java, sử dụng các phương thức gốc để tải trình bao bọc.

Trình bao bọc kết nối mã Java với mã Perl trong tệp nguồn Perl.

May mắn thay, một Makefile.PL chung đơn giản hóa quy trình. Đây là một kịch bản Perl tạo ra một Makefile cho bạn.

+1

JPL đã bị xóa khỏi Perl 5.10. Tôi sẽ không khuyên bạn nên áp dụng API chết. Sử dụng Inline :: Java để thay thế. – daotoad

1

lưu ý, bất kỳ tệp nào mà tập lệnh Perl tạo, nó được tạo trong thư mục làm việc Java. chỉ cần tham khảo tệp đó dưới dạng './myPerlCreatedFile.ext'

Các vấn đề liên quan