Serviços Web - Bioinformatica - Java/Perl

7 respostas
C

Pessoal,

Estou desenvolvendo um seviço web que aciona um programa Perl, trata os dados (enviados por upload) do usuário e devolve a saída para o user atraves de um download.

Entretanto, estou com dificuldades de acionar este programa em Perl.

Estou usando processos para executar, mas por algum motivo ele não executa.

Process processo;
       processo = Runtime.getRuntime().exec("//home//user//prog.pl");

Não sei se isto está certo.

Alguém pode me ajudar a executar um script em Perl através do Java??

Desde já, agradeço.

7 Respostas

T

exec requer o nome de um binário executável, não de um arquivo-texto executável.

Em vez de usar “//home//user//prog.pl” (que aliás não é um nome válido de um arquivo em Unix) talvez você tenha de usar:

/usr/bin/perl /home/user/prog.pl

ou

/bin/bash -c /usr/bin/perl /home/user/prog.pl

(Estou supondo que o perl esteja em /usr/bin/perl; veja na sua distribuição do Linux onde realmente ele está. Para saber isso, abra um terminal e digite o comando

type perl

Ele deve imprimir algo como

/usr/bin/perl

ou o lugar certo onde está o Perl.

C

Então,

O meu perl está instalado no /usr/bin/ mesmo, e coloquei o perl na variavel de ambiente.

coloquei o comando completo com o “bash -c” mas não funcionou mesmo assim = \

[]'s

T

Vou explicar mais uma vez. exec usa uma API do Unix (acho que é execvpe ou coisa parecida) que requer o nome de um binário executável; então você precisa especificar que quer o perl. O interpretador de comandos (/bin/bash), por sua vez, sabe que se um arquivo é marcado como executável (chmod +x) e seu nome termina com .pl, deve chamar o /usr/bin/perl.

No seu caso, o comando seria

.......exec ("/usr/bin/perl     /home/user/prog.pl");

Em particular, não gosto muito de usar a versão do exec que recebe só um parâmetro. Prefiro pôr cada comando e parâmetro em uma posição de um array de strings, e chamar aquela versão do exec que recebe esse tal array.

C

Olá thingol ,

Então, mesmo assim não foi. havia colocado este mesmo comando que vc me passou, mas de algum modo ele não executa mesmo.

Fiz um teste aqui bem bobo. Mandei executar um “ls -l” só pra ver se num era um erro maior, meu. Mas rodou perfeito !

O problema está justamente na linha em questão: processo = Runtime.getRuntime().exec("/usr/bin/perl /home/user/prog.pl");

=Z

Sabe de outra forma ?

T

a) Você consegue executar seu programa com o comando /usr/bin/perl /home/user/prog.pl em um terminal, com o usuário que você está usando para rodar seu programa Java?
b) Você não está precisando redirecionar alguma entrada ou saída?

C

A) Consigo perfeitamente.Fiz varios testes pra me certificar disto

B) Também não!

=(

Há pouco, fiz um outro programa em Perl que da um print “teste”; na tela e tentei acessá-lo utilizando o seviço.

Resultado. O serviço conseguiu acessar o arquivo sem problemas. O que me deixa com a pulga atras da orelha é que no terminal o programa executa perfeitamente.

abrç

T

Será? De qualquer forma, leia isto aqui:

Criado 15 de julho de 2009
Ultima resposta 15 de jul. de 2009
Respostas 7
Participantes 2