【发布时间】:2012-02-25 12:21:47
【问题描述】:
我有 3 个 python 文件。(first.py、second.py、third.py)我正在从第一个 python 文件执行第二个 python 文件。第二个python文件使用'import'语句来使用第三个python文件。这就是我正在做的事情。 这是我的代码。
first.py
import os
file_path = "folder\second.py"
os.system(file_path)
second.py
import third
...
(rest of the code)
third.py(包含ReportLab生成PDF的代码)
....
canvas.drawImage('xyz.jpg',0.2*inch, 7.65*inch, width=w*scale, height=h*scale)
....
当我执行这段代码时,它给出了错误
IOError: Cannot open resource "xyz.jpg"
但是当我通过写 python second.py 直接执行 second.py 文件时,一切正常..!!
即使我尝试过这段代码,
file_path = "folder\second.py"
execfile(file_path)
但它给出了这个错误,
ImportError: No module named third
但正如我所说,如果我直接执行 second.py 文件,一切正常。 !!
为什么会这样?执行这种嵌套的python文件有更好的主意吗? 任何想法或建议将不胜感激。
我使用这三个文件只是为了给出我的结构的基本概念。您可以将此执行流程视为单个流程。这样的进程太多了,每个文件都包含千行代码。这就是为什么我不能将整个代码更改为模块化,可以由 import 语句使用。 :-( 所以问题是如何制作一个 python 文件来负责执行所有其他进程。 (如果我们单独执行每个进程,一切正常)
【问题讨论】:
-
这是从单独的模块构建 Python 应用程序的一种非常糟糕的方法。使用
os.system运行另一个python 脚本是相当愚蠢的。execfile稍微好一点。最好是导入。您确实应该重做您的设计,以便您的各种模块具有可以导入和调用的功能,而不是继续尝试使其工作。 -
我对 os.system 调用的目的感到困惑,但实际上您应该导入其他 python 模块来执行它们,而不是跳出 shell 并运行它们。
-
不确定它是否与您的问题有关,但您的文件名字符串中的反斜杠应该加倍,否则它们将被解释为字符串转义字符而不引用预期的文件。
标签: python