Выполнение внешней программы через system () не выполняется должным образом - PullRequest
0 голосов
/ 23 октября 2009

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

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

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

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

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

Ответы [ 4 ]

1 голос
/ 24 октября 2009

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

1 голос
/ 24 октября 2009

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

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

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

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

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

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

0 голосов
/ 23 октября 2009

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

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

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

0 голосов
/ 23 октября 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...