我不知道如何谷歌这个权利:我想在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
答案 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");