首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有自动相对路径的execfile

具有自动相对路径的execfile
EN

Stack Overflow用户
提问于 2014-02-28 00:02:54
回答 2查看 3.4K关注 0票数 0

我需要能够通过execfile()从工作目录外部调用python脚本,而不必每次通过解释器指定相对文件路径。

而不是:

代码语言:javascript
复制
execfile("..\\UserScripts\\HelloWorld.py")

我需要打个电话:

代码语言:javascript
复制
execfile("HelloWorld.py")

有没有一个sys.path,我可以把它添加到其中,让它工作?目录是固定的,工作目录和文件的位置也是固定的。期望的是,用户可以将文件放入UserScripts目录,并期望能够在没有相对文件路径的情况下通过解释器调用它。

EN

回答 2

Stack Overflow用户

发布于 2016-07-14 11:42:54

下面的脚本假定HelloWorld.py与您的可执行文件在同一目录中。

代码语言:javascript
复制
import os.path
import sys

execfile(os.path.join( os.path.dirname(sys.argv[0]), 'HelloWorld.py'))

但是,如果您有一个保存代码段的子目录(我们称其为‘../UserSnippet’),则可以指定相对于包含execfile的脚本的路径:

代码语言:javascript
复制
execfile(os.path.join( os.path.dirname(sys.argv[0]), '..','UserSnippets','HelloWorld.py'))

使用os.path.join可以保持代码的可移植性(我希望,我只在我的Mac上测试过)。

票数 1
EN

Stack Overflow用户

发布于 2014-02-28 21:00:26

我强烈建议使用不同的名称(比如execscript),您可以将其添加到在其中执行用户脚本的作用域:

代码语言:javascript
复制
scope.SetVariable("execscript", (CodeContext context, string filename) => {
    Builtins.execfile(context, Patch.Combine("../../Scripts", filename));
});

这将使它看起来像一个内置的,而不会弄乱内置的字典。

如果一定要使用execfile,最好的办法就是用一个可以修补目录然后调用旧execfile的内置and替换掉它。下面是一些完全未经测试、未经编译的代码,它们可以为您指明正确的方向:

代码语言:javascript
复制
var engine = Python.CreateEngine();
var builtins = engine.GetBuiltinModule();
builtins.SetVariable("execfile", (CodeContext context, string filename) => {
    Builtins.execfile(context, Patch.Combine("../../Scripts", filename));
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22073848

复制
相关文章

相似问题

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