La ejecución del programa externo a través del sistema () no se ejecuta correctamente

StackOverflow https://stackoverflow.com/questions/1612451

  •  06-07-2019
  •  | 
  •  

Pregunta

Intento llamar a un programa (ncbi blast, para aquellos que necesitan saber) desde mi código, mediante la llamada al comando en una llamada al sistema ().

Si ejecuto la cadena directamente en el shell, funciona según lo previsto, pero si intento la misma cadena a través del sistema (), el programa regresa mucho más rápido, sin los resultados deseados. Se crea el archivo de salida, pero el tamaño del archivo es 0. El código de error devuelto también es 0. Incluso intenté agregar " > output.log 2 > error.log " pero estos archivos no se crean.

Supongo que tiene algo que ver con las variables de entorno o la ruta ...

El nombre del archivo de salida se proporciona a través de -o parámetro de línea de comando, no redirección de salida.

Leí algo sobre la posibilidad de que el comando popen sea más adecuado para mi caso de uso, pero no puedo encontrarlo. ¿De qué biblioteca es?

¿Fue útil?

Solución

La causa más común de estos problemas es la configuración incorrecta de la variable de entorno en los ~ / .bashrc .

Debería poder ver lo que ncbi no está satisfecho al ejecutar

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

Otra forma común de depurar esto es con strace . Ejecutar:

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

y busque pistas en /tmp/strace.out .

Otros consejos

¿Hay alguna razón por la que no quiera fork y exec ? Este es un lenguaje común para ejecutar un proceso desde otro.

popen está en la biblioteca estándar de C Consulte la página de manual

Algunas preguntas rápidas:

  • ¿Cómo se ejecuta en el shell?
  • ¿Cómo se ejecuta en el comando del sistema?
  • ¿Cuál es el valor devuelto por el sistema?

Es preferible copiar y pegar exactamente desde tu terminal que una descripción en inglés.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top