os.getcwd()、sys.path[0]、sys.argv[0]和__file__的区别

要分清这几个的区别与使用条件,实际测试一下是最准确的。

设计测试方法:

一个主模块用来运行,一个子模块用来被主模块调用

主模块路径: 

/Users/stephen/Documents/code/test_dir/01test

子模块路径:  

/Users/stephen/Documents/code/test_dir/02test

运行模块的路径:  

/Users/stephen/Documents/code/test_dir/01test/001_test

ok 现在编写两模块代码

  • 子模块 submodule.py

    import os
    import sys
    def child_test():
    print('sub os.getcwd():{}'.format(os.getcwd()))
    print('sub sys.path[0]:{}'.format(sys.path[0]))
    print('sub sys.argv[0]:{}'.format(sys.argv[0]))
    print('sub __file__:{}'.format(__file__))
    if __name__ == '__main__':
    chid_test()
  • 主模块 mainmodule.py
    “`py
    import os
    import sys
    import submodule
    def main():
    print(‘main os.getcwd():{}’.format(os.getcwd()))
    print(‘main sys.path[0]:{}’.format(sys.path[0]))
    print(‘main sys.argv[0]:{}’.format(sys.argv[0]))
    print(‘main file:{}’.format(file))

    submodule.child_test()

if name == ‘main‘:
main()


 ## 目录结构 
 

├── 01test
│ ├── 001_test # 运行目录
│ └── mainmodule.py # 主模块
└── 02test
└── submodule.py # 被调用模块


## ok 来看看结果  

Traceback (most recent call last):
File “../mainmodule.py”, line 3, in

版权声明:本文为Mr-a2z原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/Mr-a2z/p/8746658.html