Perl系统调用没有可执行文件的路径,除了使用PATH变量

时间:2013-02-03 19:12:03

标签: perl include system-calls

我不知道如何谷歌这个权利:我想在Perl中调用外部工具 - 对于非root安装模块,我可以将目录添加到@INC。但这不适用于其他二进制文件/可执行文件。例如。 Perlfile位于/home/user/dev/perl.pl,模块位于/home/user/dev/modules/,Pythonscript位于/home/user/dev/tools/python.py。现在我可以push @INC,'/home/user/dev/modules/'找到所有模块。对于pythonscript,我需要使用整个路径system("python /home/user/dev/tools/python.py")。是否有可能自动搜索tools目录,而不将其添加到构建PATH,所以我只需要调用system("python python.py")? THX

4 个答案:

答案 0 :(得分:0)

您可以在Perl脚本中追加PATH变量的路径:

$ENV{PATH} .= ':/home/user/dev/tools';

通常,该设置不能更改父进程的PATH变量,只能更改脚本本身及其子进程。

答案 1 :(得分:0)

如果您的Python脚本具有指向python的正确shebang行(例如#!第一行),则不需要执行system("python /home/user/dev/tools/python.py") - 仅system("/home/user/dev/tools/python.py")就足够了。

然后您不需要依赖Python搜索$PATH

然后,您可以更改$ PATH:

local $ENV{PATH} = $ENV{PATH} ? "$ENV{PATH}:/home/user/dev/tools" 
                              : "/home/user/dev/tools";

system("python.py");

(确保将其本地化,以免影响程序中其他位置的PATH)

答案 2 :(得分:0)

可能符合或不符合您需求的替代方法:

在调用系统之前的某个地方:

chdir '/home/user/dev/tools' or die "Couldn't chdir to tools: $!\n";

答案 3 :(得分:0)

关于您的更新,

  

在perl.pl中设置$ ENV没有任何影响。 $ export PATH = $ PATH:/ home / user / dev / tools并从shell运行$ python.py。

那不是真的。如果可行,那么设置$ENV{PATH}并从Perl运行python.py也是如此。

local $ENV{PATH} = "$ENV{PATH}:/home/user/dev/tools";
system("python.py");