Pergunta

Eu tento chamar um programa (NCBI BLAST, para aqueles que precisam de saber) do meu código, via chamando o comando em um sistema () chamada.

Se eu executar a corda diretamente no shell, ele funciona como pretendido, mas se eu tentar a mesma seqüência via system (), o programa retorna muito mais rápido, sem os resultados pretendidos. O arquivo de saída é criado, mas o tamanho do arquivo é 0. O código de erro retornado é também 0. Eu até tentei acrescentando "> output.log 2> error.log", mas esses arquivos não são criados.

Eu acho que tem algo a ver com variáveis ??de ambiente ou o caminho ...

O nome do arquivo de saída é dado via linha de comando parâmetro -o, não redirecionamento de saída.

Eu li algo sobre o comando popen sendo possivelmente mais adequado para o meu caso de uso, mas não posso encontrá-lo, o que biblioteca é isso?

Foi útil?

Solução

A causa mais comum de tais problemas é o ajuste variável de ambiente incorreto em queridos ~/.bashrc.

Você deve ser capaz de ver o que ncbi é infeliz sobre executando

$SHELL -c '<exact string you pass to system()>'

Outra forma comum para depurar isso é com strace. Executar:

strace -fo /tmp/strace.out ./myProgram

e olhar em /tmp/strace.out em busca de pistas.

Outras dicas

Existe alguma razão que você não quer fork e exec? Esta é uma expressão comum para a execução de um processo de outro.

popen está na biblioteca padrão C Veja a página man

Algumas perguntas rápidas:

  • Como você executar em no shell?
  • Como você executar no comando do sistema?
  • O que é o valor retornado pelo sistema?

Exact copiar e colar de você do terminal é preferível, em seguida, uma descrição Inglês.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top