2015-10-15 35 views
0

我有一个关于导出库路径的查询&包括鸭嘴兽变种调用者。它需要的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

您正在设置新制shell的环境变量,而不是父进程为python的Perl进程的环境变量。对于这一点,你需要以下条件:

$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

我正在谈论产生的shell来执行你的shell命令。你如何看待你传递给'system'的shell命令被执行? 'system($ shell_cmd)'是system('sh','-c',$ shell_command)''的缩写。这是一种浪费,也是潜在的问题根源。它可以很容易地添加shell注入漏洞。它使信令变得复杂,并且它阻止你准确地确定'python'退出的方式。所以不,这不好;它充其量是充足的。 – ikegami