簡體   English   中英

從modulename.main()方法訪問時,如何使變量可從另一個python腳本訪問

[英]How do I make a variable accessible from another python script when accessed from modulename.main() method

我有一個簡單的python腳本,它調用了另一個python腳本的主要功能。 像這樣:

invoker_code.py

import os
invoked_code = '/tmp/invoked_code.py'
import sys
if os.path.exists(invoked_code):
    sys.append(invoked_code)
else:
    sys.exit(1)
import invoked_code
__data_bag = { 'var' : 'value' }
invoked_code.main()

/tmp/invoked_code.py

def main():
    print '%s' %(__data_bag['var'])

我希望invoked_code能夠從其代碼庫中訪問變量__dict_bag 這應該通過對invoked_code.py腳本進行最少或零個代碼更改來實現,因為這是第三方腳本,並且我對該腳本沒有寫權限。 我怎樣才能做到這一點?

模塊可以訪問和修改彼此的全局變量:

module1.py

foobar = [1, 2, 3]
def main():
    print foobar[0]
def printx():
    print x

module2.py

import module1
print module1.foobar
module1.main()
module1.foobar[0] = 100
module1.main()
module1.x = "exex"
module1.printx()

運行module2.py

[1, 2, 3]
1
100
exex

請注意,您可以在另一個模塊中修改全局變量,也可以創建一個。 但是,我反而建議按戳所述做,並將變量傳遞給調用的函數。

invoked_codemain函數將在其自己的范圍內查找__data_bag名稱。 因此,它將首先嘗試在函數本身內部找到它,然后進入模塊級別,即在invoked_code.py定義的invoked_code.py

由於__data_bag都不存在,因此該函數將無法找到它。 因此,要解決此問題而不更改invoked_code ,您需要將數據提供給函數將要查看的地方。 但是,您唯一可以訪問的地方是模塊,所以這是您唯一可以做的事情:

import invoked_code
invoked_code.__data_bag = { 'var' : 'value' }
invoked_code.main()

注意,這實際上不是解決此問題的好方法。 解決此問題的正確方法是讓main函數為此接受一個參數:

def main(data_bag):
    print '%s' %(data_bag['var'])

然后,您可以簡單地在調用腳本中傳遞值:

invoked_code.main(__data_bag)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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