首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >不带可执行文件路径的Perl系统调用,使用path变量除外

不带可执行文件路径的Perl系统调用,使用path变量除外
EN

Stack Overflow用户
提问于 2013-02-04 03:12:03
回答 4查看 1.9K关注 0票数 0

我不知道如何用谷歌搜索:我想在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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 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也是如此。

代码语言:javascript
运行
复制
local $ENV{PATH} = "$ENV{PATH}:/home/user/dev/tools";
system("python.py");
票数 0
EN

Stack Overflow用户

发布于 2013-02-04 03:16:59

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

代码语言:javascript
运行
复制
$ENV{PATH} .= ':/home/user/dev/tools';

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

票数 0
EN

Stack Overflow用户

发布于 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:

代码语言:javascript
运行
复制
local $ENV{PATH} = $ENV{PATH} ? "$ENV{PATH}:/home/user/dev/tools" 
                              : "/home/user/dev/tools";

system("python.py");

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14676194

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档