簡體   English   中英

Python:“ exec open(external.py).read()in globals(),locals()”,同時允許它在主腳本中操作對象

[英]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.pyfile2.py從我的主腳本(內) main_file.py )。

我是一名新手程序員,所以這樣做是因為外部文件位於驅動器上的其他位置。 main_file.py旁邊的許多不同的Python腳本main_file.py訪問file1.pyfile2.py的內容。 因此,當我更新這兩個腳本時,所有訪問它們的腳本都將從更新中受益。 它們包含適用於我所有Python腳本的列表和通用規則。

在我將新功能newFunction()引入main_file.py之前,一切工作正常。 從主腳本的另一個函數newFunction()內調用topFunction()


錯誤

exec open(file2.py).read()

語法錯誤:函數'topFunction()'不允許使用不合格的exec,因為它包含帶有自由變量的嵌套函數。

該錯誤消息實際上指向下面的步驟2:

  1. topFunction()首先調用newFunction()
  2. 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM