Выполнение внешней программы через system () не выполняется должным образом

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

  •  06-07-2019
  •  | 
  •  

Вопрос

Я пытаюсь вызвать программу (ncbi blast, для тех, кому нужно знать) из моего кода, вызывая команду в вызове system().

Если я выполняю строку непосредственно в командной оболочке, она работает так, как задумано, но если я пробую ту же строку через system(), программа возвращается намного быстрее, без ожидаемых результатов.Выходной файл создан, но размер файла равен 0.Возвращаемый код ошибки также равен 0.Я даже пытался добавить "> output.log 2> error.log", но эти файлы не были созданы.

Я предполагаю, что это как-то связано с переменными окружения или путем...

Имя выходного файла задается через параметр командной строки -o, а не через перенаправление вывода.

Я читал что-то о том, что команда popen, возможно, лучше подходит для моего варианта использования, но я не могу ее найти, из какой это библиотеки?

Это было полезно?

Решение

Наиболее распространенная причина таких проблем - неправильная установка переменных окружения в ~ / .bashrc .

Вы сможете увидеть, что ncbi не устраивает, выполнив

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

Еще один распространенный способ отладки - strace . Выполнение:

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

и найдите в /tmp/strace.out подсказки.

Другие советы

Есть ли причина, по которой вы не хотите использовать fork и exec ? Это обычная идиома для выполнения одного процесса из другого.

popen находится в стандартной библиотеке C см. справочную страницу

Несколько коротких вопросов:

  • Как вы выполняете in в командной оболочке?
  • Как вы выполняете системную команду?
  • Какое значение возвращает система?

Точное копирование и вставка из вашего терминала предпочтительнее, чем описание на английском языке.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top