Звучит разумно. Вы бы написали что-то вроде этого.
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, или вы можете вызвать оболочку, чтобы заставить ее искать путь, используя
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
}
person
Borodin
schedule
22.05.2016