Как назвать объекты Java и функции от CPython?

Я ожидал бы иметь только одну запись, но это может быть диапазон.

scan 'mytablename',{FILTER=>org.apache.hadoop.hbase.filter.PrefixFilter.new(org.apache.hadoop.hbase.util.Bytes.toBytes(org.apache.hadoop.hbase.util.MD5Hash.getMD5AsHex(org.apache.hadoop.hbase.util.Bytes.toBytes('somekeyvalueprefix'))))}

Я обнаружил, что мы можем использовать классы hbase в командной строке. Однако я не получил ожидаемого значения.

11
задан Luc Touraille 4 May 2012 в 08:29
поделиться

4 ответа

Самая легкая вещь сделать

  1. Запишите тривиальный CLI для своего Java "функция". (Нет такой вещи, таким образом, я предположу, что Вы на самом деле имеете в виду функцию метода класса Java.)

    public class ExposeAMethod {
        public static void main( String args[] ) {
             TheClassToExpose  x = new TheClassToExpose();
            x.theFunction();
        }
    }
    
  2. Скомпилируйте и создайте исполняемый файл JAR с этим как точка входа. Назовите его ExposeAMethod.jar

  3. Назовите это от команды созданным подпроцессом.

    import subprocess
    p = subprocess.Popen("java -jar ExposeAMethod.jar", shell=True)
    sts = os.waitpid(p.pid, 0)
    

Это - минимум. И это действительно не очень. Я строки количества 6 Java, 3 строки Python и Вы в порядке.

Если Вы хотите передать аргументы этой функции конструктора класса или метода Java, необходимо будет записать еще несколько строк кода. У Вас есть два варианта.

  • Считайте аргументы от stdin, запишите результаты на stdout. Это относительно легко и работает действительно хорошо.

  • Проанализируйте аргументы как параметры командной строки к Java, запишите результаты на stdout. Это немного более твердо, но делает вывод очень приятно. Премия - то, что у Вас теперь есть полезная программа Java командной строки, которую можно снова использовать.

9
ответ дан 3 December 2019 в 02:21
поделиться

Если Вы не хотите идти запись Ваш собственный маршрут JNI/C.

Другая опция состоит в том, чтобы использовать jpype, который для меня всегда является, что я использую для баз данных Oracle доступа becuase установку оракула c, драйверы на ПК лаваш. Можно сделать материал как (из документов):

 from jpype import * 
 startJVM("d:/tools/j2sdk/jre/bin/client/jvm.dll", "-ea") # or path to your jvm
 java.lang.System.out.println("hello world") 
 shutdownJVM()

Это не было обновлено в некоторое время и нет очень в способе документации, но это действительно работает обоснованно хорошо.

7
ответ дан 3 December 2019 в 02:21
поделиться

Необходимо будет создать Python C расширение, которое встраивает Java - на основе чего-то как http://www.javaworld.com/javaworld/jw-05-2001/jw-0511-legacy.html, или иначе необходимо будет запустить Java в отдельном подпроцессе.

1
ответ дан 3 December 2019 в 02:21
поделиться

Я не знаю для Python, но в прошлый раз, когда я должен был назвать Java из приложения C (сервис NT), я должен был загрузиться jvm.dll. Смотрите на документацию JNI.

Кроме того, Вы всегда называете вызов

os.system("java com.myapp.MyClass") 

если Вы не обеспокоены производительностью.

1
ответ дан 3 December 2019 в 02:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: