2010-12-16 89 views
1

是否有人知道,如果我有一个脚本one.py被写入方式如下:的Python - 运行外部脚本

if __name__ == '__main__': 
    # Do something 

而且我想提醒的是另一个脚本main功能。我应该怎么做?

我想这会是这样的(让我们说这是launcher.py

# 'one' stands for import from `one.py` module 
import one 

if __name__ == '__main__': 
    one.main() 

唯一的问题是,我不能叫main()这种方式。

应该怎么做?

回答

1
with file('a.py','rU') as f: 
    co=compile(f.read(),'foobar','exec') 
    exec co in {'__name__':'__main__'} 
+4

这是有效的,但它不是正确的做法。关键是'__name__ =='__main __''sentinel检查你的程序是否正在独立运行。当然,你可以假装它是,但你不应该 - 相反,你应该调用它暴露的API!也就是说,你从'b'调用'a.main()'。 – katrielalex 2010-12-16 18:04:13

+1

除了@katrielalex所说的,这似乎是不必要的复杂,乍一看可能是不可理解的。 – 2010-12-16 18:13:29

+0

我与katrielalex和菲利克斯,这是什么请求,但它绝对不是要走的路。 – slezica 2010-12-16 19:31:32

8

定义脚本,如:

def main(): 
    # Do something 

if __name__ == '__main__': 
    # Processing of possible input parameters here and passing to main 
    main() 

然后,你可以做

# 'one' stands for import from `one.py` module 
import one 

if __name__ == '__main__': 
    one.main() 

当然,你可以命名但是你想要的功能。