Звучит разумно. Ты бы написал что-то вроде этого.
import java.lang.Runtime;
int width = 99;
try {
Runtime runt = Runtime.getRuntime()
Process proc = runt.exec('/usr/bin/perl', '/path/to/myperl.pl', Integer.toString(width));
proc.waitFor();
}
catch (Exception ioe) {
ioe.printStackTrace();
}
Конечно, вы должны настроить /usr/bin/perl
туда, где ваш собственный Perl exeutable на самом деле, или вы могли бы вызвать оболочку, чтобы заставить ее искать путь, используя
runt.exec('/bin/bash', '-c', 'perl', '/path/to/myperl.pl', Integer.toString(width));
Что касается как чтобы вернуть изображение клиенту, вы не говорите много о том, как работает ваша программа Perl, но либо вы скажете, где писать файл, либо он сам решает, и сообщает вам, где он был помещен позже.
Если это первый, тогда вы, вероятно, пройдете путь в командной строке, так что вам просто нужно расширить вызов на runt.exec
выше, чтобы передать другой параметр
Если это последний, то, предположительно, программа печатает в STDOUT, где он поместил новый файл, и вам нужно прочитать, что поток из вашего Java-кода для сбора информации. Это будет выглядеть следующим образом вместо в proc.waitFor()
вызова
import java.io.*;
BufferedReader inp = new BufferedReader(
new InputStreamReader(proc.getInputStream())
);
while ((line = inp.readLine()) != null) {
// Process output of Perl code to get file location
}
ваше решение кажется хорошим, только если у меня есть все окружение установлены на одном узле (TOMCAT, Perl). – Ahmedy
В jelastic узел tomcat отделен от узла centos. Они действуют как два разных компьютера, «если я прав». Поэтому я не могу использовать ваш метод для вызова программы perl, если они не находятся в одном узле. – Ahmedy