Executando programa externo via system () não executar corretamente
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?
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.