我有3個python文件(first.py,second.py,third.py)我從第一個python文件執行第二個python文件。第二個python文件使用'import'語句來使用第三個python文件。這就是我正在做的。 這是我的代碼。如何執行嵌套的python文件
first.py
import os
file_path = "folder\second.py"
os.system(file_path)
second.py
import third
...
(rest of the code)
third.py(其含有用於產生PDF ReportLab代碼)
....
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文件有沒有更好的主意? 任何想法或建議將不勝感激。
我使用這三個文件只是爲了給出我的結構的基本思想。您可以將此流程視爲單個流程。像這樣的過程太多,每個文件都包含第1000行代碼。這就是爲什麼我無法將整個代碼更改爲可由import語句使用的模塊化代碼。 :-( 所以問題是如何製作一個單獨的python文件,它將負責執行所有其他進程(如果我們單獨執行每個進程,一切正常)
這是從單獨模塊構建Python應用程序的一種非常糟糕的方式。使用'os.system'來運行另一個python腳本是相當愚蠢的。 'execfile'稍好些。導入它是最好的。你真的應該重做你的設計,以便你的各個模塊具有你可以導入和調用的功能,而不是繼續嘗試這個工作。 – 2012-02-25 12:26:18
我很困惑os.system調用正在實現什麼,但是真的應該導入其他python模塊來執行它們,而不是打開shell並運行它們。 – 2012-02-25 12:28:32
不確定它是否與您的問題相關,但是可以將文件名字符串中的反斜槓加倍,否則它們將被解釋爲字符串轉義字符並且不引用預期文件。 – martineau 2012-02-25 16:30:09