os.getcwd()、sys.path[0]、sys.argv[0]和__file__的区别,终于弄清楚了
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