测试
test.py
# -* - coding: UTF-8 -* -
import sys,os
import test2
import test2#事实上只执行一次
print "file: test.py, before main, sys.argv[0]:%s"%sys.argv[0]
if __name__ == "__main__":
print "file: test.py, in main, sys.argv[0]:%s"%sys.argv[0]
os.system("python test2.py")
test2.py
# -* - coding: UTF-8 -* -
import sys
print "file: test2.py, before main, sys.argv[0]:%s"%sys.argv[0]
if __name__ == "__main__":
print "file: test2.py, in main, sys.argv[0]:%s"%sys.argv[0]
命令
$python test.py
输出
file: test2.py, before main, sys.argv[0]:test.py
file: test.py, before main, sys.argv[0]:test.py
file: test.py, in main, sys.argv[0]:test.py
file: test2.py, before main, sys.argv[0]:test2.py
file: test2.py, in main, sys.argv[0]:test2.py
分析
1,对于一个python文件test.py,如果是运行命令python test.py,则会先执行import以及最开始的语句,然后会再执行main部分。
2,比如这里的test.py,对于命令python test.py,会先执行import部分,当import test2.py时,会进入test2.py,把除了main的部分都执行一遍。所以执行print "file: test2.py, before main, sys.argv[0]:%s"%sys.argv[0]。这里的import有点像直接贴过来,所以说sys.argv[0]用的是test.py。但是也要注意,即使import test2.py两次,也只执行一次。
3,然后test.py继续执行到print语句。
4,最后再执行main的部分,但是test2.py因为并没有主动执行,所以不会执行。
5,最后执行的os.system()相当于直接在命令行执行,所以sys.argv[0]就是test2.py