Javabridge tải một lớp Java, org. hồ sơ di động. javabridge. CPython, có thể được sử dụng để thực thi mã Python. Lớp này có thể được sử dụng trong mã Java được gọi từ trình thông dịch Python hoặc nó có thể được sử dụng trong Java để chạy Python nhúng trong Java
lớporg.cellprofiler.javascript.
CPython
[]Lớp CPython liên kết trình thông dịch Python với JVM và cung cấp khả năng thực thi các tập lệnh Python
exec
[]Tranh luận- tập lệnh – Tập lệnh Python để thực thi
- locals – Bản đồ tên của đối tượng Java trong bối cảnh thực thi Python tới chính đối tượng Java. Các đối tượng trong bản đồ có phạm vi cục bộ. Giá trị null có thể được sử dụng nếu không cần xác định cục bộ
- toàn cầu – Bản đồ tên của đối tượng Java với chính đối tượng Java. Các đối tượng trong bản đồ có phạm vi toàn cầu. Nếu một giá trị null được sử dụng, ____ _ _ _ _ _ mặc định là toàn cầu dựng sẵn
exec[]
thực thi tập lệnh được truyền trong trình thông dịch Python. Trình thông dịch thêm các toàn cầu dựng sẵn vào các toàn cầu được truyền vào, sau đó thực thi tập lệnh. Cùng một bản đồ có thể được sử dụng cho cả địa phương và toàn cầu - chế độ này có vẻ quen thuộc hơn với những người thường xuyên viết mã bằng Python và mong đợi câu lệnh import
có tác dụng toàn cầu
Không có phương pháp eval
. Bạn có thể truy xuất các giá trị bằng cách chuyển một đối tượng vùng chứa, chẳng hạn như một mảng hoặc bản đồ làm một trong các đối tượng cục bộ và bạn có thể đặt các phần tử trong đối tượng với các giá trị được trả về
Thí dụ
class MyClass { static final CPython cpython = CPython[]; public List whereIsWaldo[String root] { ArrayList result = new ArrayList[]; Hashtable locals = new Hashtable[]; locals.put["result", result]; locals.put["root", root]; StringBuilder script = new StringBuilder[]; script.append["import os\n"]; script.append["import javabridge\n"]; script.append["root = javabridge.to_string[root]"]; script.append["result = javabridge.JWrapper[result]"]; script.append["for path, dirnames, filenames in os.walk[root]:\n"]; script.append[" if 'waldo' in filenames:"]; script.append[" result.add[path]"]; cpython.exec[script.toString[], locals, null]; return result; } }
execute
[]import javabridge cpython = javabridge.JClassWrapper['org.cellprofiler.javabridge.CPython'][] d = javabridge.JClassWrapper['java.util.Hashtable'][] result = javabridge.JClassWrapper['java.util.ArrayList'][] d.put["result", result] cpython.execute[ 'import javabridge\n' 'x = { "foo":"bar"}\n' 'ref_id = javabridge.create_and_lock_jref[x]\n' 'javabridge.JWrapper[result].add[ref_id]', d, d] cpython.execute[ 'import javabridge\n' 'ref_id = javabridge.to_string[javabridge.JWrapper[result].get[0]]\n' 'assert javabridge.redeem_jref[ref_id]["foo"] == "bar"\n' 'javabridge.unlock_jref[ref_id]', d, d]0 là một từ đồng nghĩa với
import javabridge cpython = javabridge.JClassWrapper['org.cellprofiler.javabridge.CPython'][] d = javabridge.JClassWrapper['java.util.Hashtable'][] result = javabridge.JClassWrapper['java.util.ArrayList'][] d.put["result", result] cpython.execute[ 'import javabridge\n' 'x = { "foo":"bar"}\n' 'ref_id = javabridge.create_and_lock_jref[x]\n' 'javabridge.JWrapper[result].add[ref_id]', d, d] cpython.execute[ 'import javabridge\n' 'ref_id = javabridge.to_string[javabridge.JWrapper[result].get[0]]\n' 'assert javabridge.redeem_jref[ref_id]["foo"] == "bar"\n' 'javabridge.unlock_jref[ref_id]', d, d]1 là một từ khóa Python. Sử dụng
import javabridge cpython = javabridge.JClassWrapper['org.cellprofiler.javabridge.CPython'][] d = javabridge.JClassWrapper['java.util.Hashtable'][] result = javabridge.JClassWrapper['java.util.ArrayList'][] d.put["result", result] cpython.execute[ 'import javabridge\n' 'x = { "foo":"bar"}\n' 'ref_id = javabridge.create_and_lock_jref[x]\n' 'javabridge.JWrapper[result].add[ref_id]', d, d] cpython.execute[ 'import javabridge\n' 'ref_id = javabridge.to_string[javabridge.JWrapper[result].get[0]]\n' 'assert javabridge.redeem_jref[ref_id]["foo"] == "bar"\n' 'javabridge.unlock_jref[ref_id]', d, d]0 thay cho
import javabridge cpython = javabridge.JClassWrapper['org.cellprofiler.javabridge.CPython'][] d = javabridge.JClassWrapper['java.util.Hashtable'][] result = javabridge.JClassWrapper['java.util.ArrayList'][] d.put["result", result] cpython.execute[ 'import javabridge\n' 'x = { "foo":"bar"}\n' 'ref_id = javabridge.create_and_lock_jref[x]\n' 'javabridge.JWrapper[result].add[ref_id]', d, d] cpython.execute[ 'import javabridge\n' 'ref_id = javabridge.to_string[javabridge.JWrapper[result].get[0]]\n' 'assert javabridge.redeem_jref[ref_id]["foo"] == "bar"\n' 'javabridge.unlock_jref[ref_id]', d, d]1 để gọi Python từ CWrapper javabridge cho CPython
Duy trì các tham chiếu đến các giá trị Python
Bạn có thể muốn duy trì các tham chiếu đến các đối tượng Python trong quá trình thực thi tập lệnh. Các hàm sau đây cho phép người gọi Java tham chiếu đến giá trị Python [có thể là loại cơ sở hoặc đối tượng] thông qua mã thông báo có thể được trao đổi lấy giá trị bất kỳ lúc nào. Mã Java chịu trách nhiệm quản lý thời gian tồn tại của tham chiếu. Thí dụ