[英]Python: “exec open(external.py).read() in globals(), locals()” while allowing it to manipulate objects in main script
我現在用的是可怕的exec open
在Python 2.7,執行其他兩個Python文件( file1.py
和file2.py
從我的主腳本(內) main_file.py
)。
我是一名新手程序員,所以這樣做是因為外部文件位於驅動器上的其他位置。 main_file.py
旁邊的許多不同的Python腳本main_file.py
訪問file1.py
和file2.py
的內容。 因此,當我更新這兩個腳本時,所有訪問它們的腳本都將從更新中受益。 它們包含適用於我所有Python腳本的列表和通用規則。
在我將新功能newFunction()
引入main_file.py
之前,一切工作正常。 從主腳本的另一個函數newFunction()
內調用topFunction()
。
exec open(file2.py).read()
語法錯誤:函數
'topFunction()'
不允許使用不合格的exec,因為它包含帶有自由變量的嵌套函數。
該錯誤消息實際上指向下面的步驟2:
topFunction()
首先調用newFunction()
topFunction()
要exec open(file2.py)
為了使事情更加復雜, newFunction()
從file1.py
訪問列表變量, file1.py
變量先前已執行到main_file.py
。 進而, file2.py
也引用這些名單main_file.py
一旦他們已經從執行file1.py
。
因此,我發現了至少可以使腳本運行而沒有錯誤消息的東西。
exec open(file2.py).read() in globals(), locals()
這實際上在執行代碼file2.py
,然后繼續運行還剩下些什么來運行main_file.py
。 但是問題在於file2.py
將無法操作main_file.py
中本地的變量(對象)。
我無法使file2.py
設置myString = "pancakes"
,然后無法使main_file.py
print myString
。
當我簡單地使用exec open(file2.py).read()
時,在引入newFunction()
之前這是可能的。
是否有一種變通方法來使這種工作正常進行,從而使外部執行的腳本也可以影響主腳本中使用的變量?
exec open(file2.py).read() in globals(), locals()
從文檔引用:
此函數類似於exec語句,但是解析文件而不是字符串。 它與import語句的不同之處在於,它不使用模塊管理-它無條件地讀取文件並且不創建新模塊。 [1]
參數是文件名和兩個可選字典。 使用globals和locals字典作為global和local名稱空間,將文件解析為Python語句序列(類似於模塊)並進行評估。 如果提供的話,本地變量可以是任何映射對象。 請記住,在模塊級別,全局變量和本地變量是同一字典。 如果兩個單獨的對象作為全局變量和局部變量傳遞,則代碼將像嵌入在類定義中一樣執行。
因此,您應該嘗試以下操作:
execfile('file1.py')
execfile('file2.py')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.