2011-05-24 55 views
2

時更具體地說,我有一個文件如何使__name__ == '__main__' 運行模塊

文件file1.py:

if __name__ == '__main__': 
    a = 1 

,並從文件file2.py,我想要做的事像

import file1 
print file1.a 

,而無需修改file1.py

+0

我我敢打賭,如果你說出爲什麼需要這個原因,我們可以給你一個更好的實現方法。 – RoeeK 2011-05-24 17:31:04

+0

描述手頭的任務可以幫助您獲得更好的解決方案 – 2011-05-24 18:15:08

+1

知道這是否可行,無論它是否是一個好主意,仍然很好。 – mwcz 2011-05-24 18:17:54

回答

4
import imp 
m = imp.find_module('file1') 
file1 = imp.load_module('__main__', *m) 

這就是說,你應該真的考慮修改file1.py而不是使用這個黑客。

+0

完美,謝謝! – Colin 2011-05-24 17:48:03

0

您將需要申報a outsid e的if __name__ == '__main__'範圍。目前,它只存在於if區塊的範圍內。

a = 0 
if __name__ == '__main__': 
    a = 1 
+1

不正確。 python中的語句沒有自己的作用域。只有模塊,功能和類可以。在這種特殊情況下,'a'是全局名稱,如果執行'if',則可以在'if'之外訪問。 – 2011-05-24 23:48:02

+0

謝謝你的糾正! – mwcz 2011-05-26 15:46:47

3

你不能;這首先是主要哨兵的目的。如果主標記中定義的變量在其外部是有用的,那麼它們應該在其之外定義以便開始。

+0

雖然我同意這是一個壞主意,但你可以(如果需要'execfile'&co)。查看我的答案,爲'__name__'更改*相對乾淨的黑客*。 – phihag 2011-05-24 17:33:36

4
from runpy import run_module 
data = run_module("file1", run_name="__main__") 
print data["a"] 

你不需要惹導入內部做這樣的事情的話(並作爲額外的獎勵,你會避免阻塞你的真正__main__模塊命名空間訪問)

相關問題