Python中sys.argv[0]结果不一致及获取主脚本目录的问题
问题1:sys.argv结果不一致的原因
sys.argv[0]的取值完全由调用Python解释器时传入的脚本路径参数决定:
- 你在CMD中执行
python test.py时,给解释器传的脚本路径是相对路径test.py,因此sys.argv[0]直接返回该相对路径值 - IDLE、VS Code这类编辑器执行脚本时,会默认将脚本的绝对路径作为参数传给Python解释器,因此sys.argv[0]返回完整的
C:\example\test.py
问题2:获取主脚本所在目录的最优方案
直接使用Python内置的__file__属性即可,该属性是Python为每个加载的模块内置的固定属性,主脚本作为直接运行的模块,该属性始终指向脚本本身的文件路径,完全不受调用时传参、当前工作目录修改的影响,稳定性远高于sys.argv和os.getcwd()。
你可以根据自己的使用习惯选择以下两种标准库实现方案:
方案1:使用os.path实现(兼容所有Python3版本)
import os if __name__ == "__main__": result = os.path.dirname(os.path.abspath(__file__)) print(result)
运行后将直接输出C:\example
方案2:使用pathlib实现(Python3.4+推荐,面向对象更易用)
from pathlib import Path if __name__ == "__main__": result = str(Path(__file__).resolve().parent) print(result)
如果不需要字符串类型,直接保留Path对象即可,后续拼接路径等操作会更便捷。
内容的提问来源于stack exchange,提问作者sssbbbaaa
相关产品推荐
相关产品推荐

