我不知道如何用谷歌搜索:我想在Perl中调用一个外部工具--对于未安装根目录的模块,我可以将目录添加到@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")。有没有可能自动搜索工具目录,而不把它添加到构建路径中,所以我只需要调用system("python python.py")?Thx
发布于 2013-02-04 05:38:44
关于你的更新,
在perl.pl中设置$ENV没有任何影响。$export PATH=$PATH:/home/user/dev/tools并从shell works运行$python.py。
那是胡说。如果可以,那么设置$ENV{PATH}并从Perl运行python.py也是如此。
local $ENV{PATH} = "$ENV{PATH}:/home/user/dev/tools";
system("python.py");发布于 2013-02-04 03:16:59
您可以在Perl脚本中将路径附加到path变量:
$ENV{PATH} .= ':/home/user/dev/tools';通常,该设置不能更改父进程的PATH变量,只能更改脚本本身及其子进程。
发布于 2013-02-04 03:28:11
如果您的Python脚本有正确的shebang行(例如,#!第一行)指向python,那么您不需要执行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");(确保将其本地化,以免影响程序中其他位置的路径)
https://stackoverflow.com/questions/14676194
复制相似问题