0

我不知道如何正确地用谷歌搜索:我想调用一个外部工具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")。是否有可能自动搜索工具目录,而不将其添加到构建 PATH,所以我只需要调用system("python python.py")?谢谢

4

4 回答 4

0

您可以从 Perl 脚本中将路径附加到 PATH 变量:

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

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

于 2013-02-03T19:16:58.550 回答
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)

于 2013-02-03T19:28:10.897 回答
0

一种可能适合也可能不适合您需求的替代方法:

在调用系统之前的某处:

chdir '/home/user/dev/tools' or die "Couldn't chdir to tools: $!\n";
于 2013-02-03T19:38:18.953 回答
0

关于你的更新,

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

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

local $ENV{PATH} = "$ENV{PATH}:/home/user/dev/tools";
system("python.py");
于 2013-02-03T21:38:44.413 回答