我不知道如何正确地用谷歌搜索:我想调用一个外部工具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")
?谢谢
问问题
1957 次
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 回答