2015-10-15 5 views
0

У меня есть запрос относительно экспорта пути библиотеки &, который включает в себя для вызова варианта Platypus. Требуется htslib, и platypus установлены на сервере, и у меня нет прав sudo, чтобы их изменить.Экспортировать путь библиотеки и включить в perl

Я пытаюсь использовать следующий код для экспорта библиотеки & для запуска вызывающего. Мне не хватает osmething, потому что я не могу его выполнить?

Код:

#!usr/perl-w 
use strict; 
use warnings; 

`export LIBRARY_PATH=/opt/htslib/lib/`; 
`export LD_LIBRARY_PATH=/opt/htslib/lib/`; 
`export INCLUDE_PATH=/opt/htslib/include/`; 
system ("python /opt/Platypus_0.8.1/Platypus.py callVariants --help"); 

Любой вид помощи был бы оценен.

ответ

2

Вы устанавливаете env vars только что сделанных оболочек, а не процесса Perl, который принадлежит родительскому python. Для этого необходимо следующее:

$ENV{LIBRARY_PATH} = '/opt/htslib/lib/'; 
$ENV{LD_LIBRARY_PATH} = '/opt/htslib/lib/'; 
$ENV{INCLUDE_PATH} = '/opt/htslib/include/'; 

Последняя строка кода лучше записать следующим образом, так как это позволяет избежать ненужной оболочки:

system("python", "/opt/Platypus_0.8.1/Platypus.py", "callVariants", "--help"); 
+1

Может добавить, что эти свежеприготовленные снаряды сразу отбрасываются. – simbabque

+0

Большое спасибо. Он работал, хотя команда python в системе в рамках одной котировки также отлично работает. Так что я не похож на обложку, о которой вы упомянули. –

+0

Я говорю о оболочках, порожденных для выполнения ваших команд оболочки. Как вы думаете, что команда оболочки, которую вы передаете 'system', выполняется? 'system ($ shell_cmd)' short для 'system ('sh', '-c', $ shell_command)'. Это пустая трата и потенциальный источник проблем. это упрощает добавление уязвимостей для инъекций оболочки. Это усложняет сигнализацию, и это мешает вам точно определить, как вышла «python». Так что нет, это не нормально; это в лучшем случае адекватно. – ikegami

Смежные вопросы