- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一些代码可以加载默认配置文件,然后允许用户提供他们自己的 Python 文件作为额外的补充配置或覆盖默认值:
# foo.py
def load(cfg_path=None):
# load default configuration
exec(default_config)
# load user-specific configuration
if cfg_path:
execfile(cfg_path)
但是有一个问题:execfile()
在 cfg_path
指定的文件中执行指令,就好像它在 foo.py 的工作目录中一样
,而不是它自己的工作目录。因此,如果 cfg_path
文件执行 from m import x
,import
指令可能会失败,其中 m
是一个模块在与 cfg_path
相同的目录中。
如何从其参数的工作目录中 execfile()
或以其他方式获得等效结果?另外,有人告诉我 execfile
在 Python 3 中已被弃用,我应该使用 exec
,所以如果有更好的方法我应该这样做,我洗耳恭听。
注意:我认为仅仅改变工作目录的解决方案是不正确的。据我所知,这不会将这些模块放在解释器的模块查找路径上。
最佳答案
os.chdir让您根据需要更改工作目录(您可以使用 os.path.dirname
提取 cfg_path
的工作目录);确保首先使用 os.getcwd 获取当前目录如果您想在执行完 cfg_path
后恢复它。
Python 3 确实删除了 execfile
(支持读取文件、编译
内容,然后 exec
的顺序) ,但如果您当前使用 Python 2.6 进行编码,则无需担心,因为 2to3源到源翻译可以顺畅无缝地处理这一切。
编辑:OP 在评论中表示,execfile
启动了一个单独的进程并且不遵守当前工作目录。这是错误的,这里有一个例子表明它是:
import os
def makeascript(where):
f = open(where, 'w')
f.write('import os\nprint "Dir in file:", os.getcwd()\n')
f.close()
def main():
where = '/tmp/bah.py'
makeascript(where)
execfile(where)
os.chdir('/tmp')
execfile(where)
if __name__ == '__main__':
main()
在我的机器上运行它会产生如下输出:
Dir in file: /Users/aleax/stko
Dir in file: /private/tmp
清楚地表明 execfile
确实 继续使用在 execfile
执行时设置的工作目录。 (如果执行的文件更改了工作目录,这将在 execfile
返回后反射(reflect)出来——正是因为一切都发生在同一个进程中!)。
因此,OP 仍然观察到的任何问题都不与当前工作目录相关(如果不查看代码和观察到的问题的确切细节,很难诊断它们实际上是什么;-).
关于Python:来自其他文件工作目录的execfile?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1813282/
我遇到了问题,甚至不确定从哪里开始进行故障排除。 我正在使用 slightly modified mocha-casperjs . CasperJS 是 PhantomJS 的包装器。我正在尝试在测试
我想在我的 GUI 中有一个文本框和一个按钮,单击按钮时,它应该获取文本并将其存储在其他文件的变量中,然后运行其他文件。 我希望用户输入访问 token ,GUI 应将其保存在utilities.py
python 文档指出“execfile() 不能可靠地用于修改函数的局部变量。”在页面上http://docs.python.org/2/library/functions.html#execfil
我正在尝试使用 Tkinter 为我的 Python 程序制作一个启动器。我使用了 execfile 函数,幸运的是它打开了目标 GUI。但是,所有按钮都不起作用,它会说大多数函数引用的全局变量未定义
我的结构是这样的: c |-myMain.py |-.....\someDir |-startup.py |-subDir
我有这个功能: #This function loads the tokens for the specified account. If the tokens are not found, it q
标题中提出的问题可能是the XY-Problem的情况, 但我找不到更简洁的描述。我想通过在每个脚本上运行 execfile(filename) 来测试一些 python 脚本,然后查看它们是否触发
我正在尝试将信息加载到用户定义的函数中以供进一步处理。由于输入文件必须由非程序员生成,因此我选择了以下格式: #contents of vessel_data.txt hull_length = 10
我遇到的问题与 this question 中的第一个问题类似,据我所知没有得到答复。 我有一个文件“config.py”,其中包含一个类要使用的大量参数(这个 config.py 文件会更改),但是
是否可以在不使用 if/else 语句的情况下中断使用 execfile 函数调用的 Python 脚本的执行?我试过 exit(),但它不允许 main.py 完成。 # main.py print
我在 ipython shell 内部工作,经常需要重新加载包含正在构建的函数的脚本文件。 在我的 main.py 中我有: def myreload(): execfile("main.py") e
我有一个运行多个 python 代码的代码,如下所示: execfile("1.py") execfile("2.py") execfile("3.py") 但是偶尔上述代码之一会出现错误,我会将 e
我尝试执行 *.exe 文件,但得到: 执行错误:{ 错误:spawn ${__dirname}/install.exe ENOENT 代码: var execFile = require('chil
我正在尝试从用户那里获取文件名,然后使用 execfile() 来执行该文件。下面是我的代码: print "Please enter the name of the file" filename =
我有一个包含序言信息的 config.py 脚本。我可以使用 execfile() 函数来读取配置文件的内容。 execfile("config.py") print PREAMBLE >>> "AB
我正在尝试使用他们的二进制文件连接到 browserstack 并将我的 key 作为参数传递。如果我在终端窗口中执行此操作: ./BrowserStackLocal --key ${BROWSERS
我把一个方法放在文件 mymodule.py 中: def do_something(): global a a=1 如果我尝试 >>> execfile('mymodule.py')
在我的一些 Django 应用程序中,我使用 settings_local.py 文件来覆盖在不同环境(例如开发、测试和生产)中不同的设置。我最初使用以下代码将其内容包含在 settings.py 中
我有一个 Node 脚本,它以这种方式调用外部程序 (PluginManager.exe): const util = require('util'); const execFile = util.p
我使用child_process通过phantomjs执行yslow.js。示例(CLI): phantomjs yslow.js --info all --format json url 我们可以
我是一名优秀的程序员,十分优秀!