【发布时间】:2012-12-15 04:15:50
【问题描述】:
假设我有一个文件 foo.py,我想在文件中执行一个文件 bar.py。但是,bar.py 与 foo.py 不在同一个目录中,它在一个名为 baz 的子目录中。 execfile 会工作吗? os.system呢?
【问题讨论】:
标签: python python-3.x exec
假设我有一个文件 foo.py,我想在文件中执行一个文件 bar.py。但是,bar.py 与 foo.py 不在同一个目录中,它在一个名为 baz 的子目录中。 execfile 会工作吗? os.system呢?
【问题讨论】:
标签: python python-3.x exec
只需添加一个空的__init__.py 文件以表明baz 是一个模块,并且从foo.py 执行:
from baz import bar
当然,除非您有充分的理由不将 baz 制作成模块(并使用 execfile)。
【讨论】:
导入系统, 通过在运行时附加路径来更改“sys.path”,然后导入有帮助的模块
【讨论】:
问题意味着您想将这些作为脚本运行,所以是的:您可以在 2.X 或 subprocess 中使用 execfile(调用解释器并将脚本作为参数传递)。您只需要提供文件的绝对路径。
# Python 2.X only!
execfile ('c:/python/scripts/foo/baz/baz.py')
当然,按字面意思去做是很脆弱的。如果 baz 始终是 foo 的子目录,您可以从 foo 的 file 中派生它:
baz_dir = os.path.join(os.path.dirname(__file__), "baz")
baz_file = os.path.join(baz_dir, "baz.py")
execfile(baz_file)
如果这两个文件都位于您的 python 可以看到的位置 - 即文件夹位于 sys.path 或已使用 site 添加到搜索路径中,您可以从 foo 导入 baz 并直接调用它的函数.如果您需要实际对来自 baz 的信息采取行动,而不是仅仅触发一个动作,这是一个更好的方法。 As long as there is an init.py in each folder你可以这样做
import baz
baz.do_a_function_defined_in_baz()
【讨论】: