2013-06-30 48 views
1

我想從test1.py中的test.py中定義調用Branchname並運行到以下錯誤,任何人都可以提供輸入嗎?在不同的python模塊中調用參數

test.py

import test1 
import os 
import sys 
def main(): 
    #initialize global variables & read CMD line arguments 
    global BranchName 
    ScriptDir = os.getcwd() 
    print ScriptDir 
    BranchName = sys.argv[1] 
    print "BranchName" 
    print BranchName 
    #Update input file with external gerrits, if any 
    print "Before running test1" 
    test1.main() 
    print "After running test1" 

if __name__ == '__main__': 
    main() 

test1.py

import test 
def main(): 
    print test.BranchName 

運行到以下錯誤

BranchName 
ab_mr2 
Before running test1 
Traceback (most recent call last): 
    File "test.py", line 18, in <module> 
    main() 
    File "test.py", line 14, in main 
    test1.main() 
    File "/local/mnt/workspace/test1.py", line 3, in main 
    print test.BranchName 
AttributeError: 'module' object has no attribute 'BranchName 
+0

您在這裏有一個圓形的進口,這是從來沒有好。代碼是這樣分裂的嗎? –

+0

@BurhanKhalid - 我的目標是打印從test1.py傳遞給test.py的BranchName。 – user2341103

+1

你沒有在這裏傳遞任何東西。 –

回答

1

我的目標是打印BRANCHNAME通過從test1.py

到test.py了。如果這是你的話,那麼你的文件名是相反的。此外,你沒有傳遞任何東西(你應該,而不是玩global)。

test1.py,計算BranchName,然後傳遞main方法從test

import os 
import sys 

import test 

def main(): 
    ScriptDir = os.getcwd() 
    print ScriptDir 
    BranchName = sys.argv[1] 
    print "BranchName" 
    print BranchName 
    #Update input file with external gerrits, if any 
    print "Before running test1" 
    test.main(BranchName) # here I am passing the variable 
    print "After running test1" 

if __name__ == '__main__': 
    main() 

test.py,你乾脆:

def main(branch_name): 
    print('In test.py, the value is: {0}', branch_name) 
+0

is there一種在上面的腳本中使用「if __name__ =='__main__':」在test.py中獲得此方法的方法。 – user2341103

+0

您可以將該行放入要調用的任何腳本中作爲起點。設置'ScriptDir'的腳本是起點,這就是它在'test1.py'中的原因。如果你把這行放在'test.py'中,你會得到一個錯誤,因爲你沒有任何東西要傳遞給'main'('ScriptDir'不會被設置)。 –

4

main()實際上並沒有被調用您的test.py,因爲__name__ != '__main__'

如果您打印__name__,它實際上是test

這就是爲什麼許多腳本具有if __name__ == '__main__'的原因,因此如果它被導入,則整個代碼不會運行。

爲了解決這個問題,你必須做兩件事情:

  • 你可以只取出if __name__ == '__main__':test.py,只是用main()

  • 取代它沒有必要import test1.py在你的測試。這樣做實際上在test1.py中運行main(),因此會引發錯誤,因爲test.BranchName尚未定義。

    • 但是,如果您必須導入test1.py,實際上你可以把一個if __name__ == '__main__'在那裏,所以當你從test.py導入它,它不會運行。
+0

我該如何解決? – user2341103

+0

@ user2341103我編輯了我的回答 – TerryA

+0

@LennartRegebro其實,我已經編輯了我的回答,關於這個 – TerryA

相關問題