1

我正在尝试从 test1.py 调用 test.py 中定义的 Branchname 并遇到以下错误,任何人都可以提供输入吗?

测试.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()

测试1.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
4

2 回答 2

4

main()实际上并没有在您的 test.py 中被调用,因为__name__ != '__main__'.

如果你打印__name__,它实际上是test

这就是为什么许多脚本都有 的原因if __name__ == '__main__',所以如果它被导入,整个代码都不会运行。

要解决此问题,您必须做两件事:

  • 你可以只删除if __name__ == '__main__':你的test.py,然后将其替换为main()

  • import test1.py在你的测试中没有必要。这样做时,这实际上是main()在您的中运行test1.py,因此会引发错误,因为test.BranchName尚未定义。

    • 但是,如果您必须 import test1.py,您实际上可以在其中放置一个if __name__ == '__main__',因此当您从 导入它时test.py,它不会运行。
于 2013-06-30T05:15:53.497 回答
1

我的目标是打印从 test1.py 传递给 test.py 的 BranchName

如果这是您的情况,那么您的文件名将被颠倒。此外,你没有传递任何东西(你应该这样做,而不是玩弄global)。

test1.py,计算BranchName,然后将其传递mainfrom 的方法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)
于 2013-06-30T05:31:29.057 回答