Sai o código 13 do comando system () do Perl?

2

Estou tentando chamar comandos do sistema a partir do perl, usando system() .

Isso geralmente funciona bem, mas quando eu não inicio o script perl sozinho, mas tenho um programa C compilado executando-o usando a função C popen() , o perl não é capaz de executar seus comandos do sistema. O system() de Perl, em seguida, retorna com o código de saída 13.

Funciona apenas se eu usar os backticks em Perl, em vez de system . Alguém sabe por quê?

    
por user9474 21.07.2010 / 02:17

2 respostas

1

Ajudaria a ver um pouco do seu código / saída. Aqui está o meu palpite sobre a causa raiz do seu problema.

Primeiro, o sinal 13 equivale a SIGPIPE, que neste caso parece indicar que o processo perl está tentando gravar em um pipe (ou seja, STDOUT / STDERR), mas nada está lá para lê-lo.

Eu testei um pouco e minha pergunta é: você está lidando com a saída do script dentro do programa C? Em meus testes, simplesmente o processamento da saída do script perl evitou o erro SIGPIPE.

Sinal 13 produzido:

fp = popen("/home/chuckx/perl-test/perl.pl","r");
status = pclose(fp);

Sinal 13 evitado:

fp = popen("/home/chuckx/perl-test/perl.pl","r");

do {} while (fgets(output,80,fp) != NULL);

status = pclose(fp);
    
por 29.07.2010 / 22:08
0

Estou adicionando essa resposta a uma pergunta antiga porque tive um problema semelhante com popen . Se eu executar um comando com popen (em um programa C / C ++) e não ler qualquer saída do programa antes de chamar 'pclose', ele retornará um valor de 13. Acho que o que está acontecendo aqui é que o comando em execução não pode gravar toda a sua saída para o pipe (porque eu nunca li nada) assim quando ele é fechado, ele retorna o valor de 13.

Se isso estiver acontecendo com qualquer outra pessoa, tente ler todo o conteúdo do pipe / arquivo retornado por popen antes de fechá-lo.

    
por 20.10.2013 / 19:54

Tags