当前位置:  编程技术>python

Python获取脚本所在目录的正确方法

    来源: 互联网  发布时间:2014-10-04

    本文导语:  1.以前的方法如果是要获得程序运行的当前目录所在位置,那么可以使用os模块的os.getcwd()函数。如果是要获得当前执行的脚本的所在目录位置,那么需要使用sys模块的sys.path[0]变量或者sys.argv[0]来获得。实际上sys.path是Python会去...

1.以前的方法

如果是要获得程序运行的当前目录所在位置,那么可以使用os模块的os.getcwd()函数。

如果是要获得当前执行的脚本的所在目录位置,那么需要使用sys模块的sys.path[0]变量或者sys.argv[0]来获得。实际上sys.path是Python会去寻找模块的搜索路径列表,sys.path[0]和sys.argv[0]是一回事因为Python会自动把sys.argv[0]加入sys.path。

具体来说,如果你在C:test目录下执行python getpathgetpath.py,那么os.getcwd()会输出“C:test”,sys.path[0]会输出“C:testgetpath”。

更特别地,如果你用py2exe模块把Python脚本编译为可执行文件,那么sys.path[0]的输出还会变化:
如果把依赖库用默认的方式打包为zip文件,那么sys.path[0]会输出“C:testgetpathlibarary.zip”;
如果在setup.py里面指定zipfile=None参数,依赖库就会被打包到exe文件里面,那么sys.path[0]会输出“C:testgetpathgetpath.exe”。

2.正确的方法

但以上这些其实都不是脚本文件所在目录的位置。
比如C:test目录下还有一个名为sub的目录;C:test目录下有getpath.py,sub目录下有 sub_path.py,getpath.py调用sub_path.py;我们在C:test下执行getpath.py。如果我们在 sub_path.py里面使用sys.path[0],那么其实得到的是getpath.py所在的目录路径“C:test”,因为Python虚拟 机是从getpath.py开始执行的。如果想得到sub_path.py的路径,那么得这样:
os.path.split(os.path.realpath(__file__))[0]

其中__file__虽然是所在.py文件的完整路径,但是这个变量有时候返回相对路径,有时候返回绝对路径,因此 还要用os.path.realpath()函数来处理一下。也即在这个例子里,os.path.realpath(__file__)输出是 “C:testsubsub_path.py”,而os.path.split(os.path.realpath(__file__))[0]输 出才是“C:testsub”。

3.实例说明

总之,举例来讲,os.getcwd()、sys.path[0] (sys.argv[0])和__file__的区别是这样的:
假设目录结构是:

代码如下:

C:test

  [dir] getpath

    [file] path.py
    [dir] sub

      [file] sub_path.py


然后我们在C:test下面执行python getpath/path.py,这时sub_path.py里面与各种用法对应的值其实是:
os.getcwd() “C:test”,取的是起始执行目录
sys.path[0]或sys.argv[0] “C:testgetpath”,取的是被初始执行的脚本的所在目录
os.path.split(os.path.realpath(__file__))[0] “C:testgetpathsub”,取的是__file__所在文件sub_path.py的所在目录

    
 
 

您可能感兴趣的文章:

  • shell脚本中执行python脚本并接收其返回值的例子
  • Shell,Python,Jython,Perl都是脚本语言,如何选择?
  • 用Python脚本生成Android SALT扰码的方法
  • linux系统使用python监控apache服务器进程脚本分享
  • 写了个监控nginx进程的Python脚本
  • 使用python编写批量卸载手机中安装的android应用脚本
  • java直接调用python脚本的例子
  • linux系统使用python监测系统负载脚本分享
  • linux系统使用python获取内存使用信息脚本分享
  • 使用python检测手机QQ在线状态的脚本代码
  • 使用python编写android截屏脚本双击运行即可
  • Python Mysql自动备份脚本
  • Python抓取Discuz!用户名脚本代码
  • linux系统使用python获取cpu信息脚本分享
  • linux下如何运行带参数的python脚本
  • python备份文件以及mysql数据库的脚本代码
  • 重命名批处理python脚本
  • Python linecache.getline()读取文件中特定一行的脚本
  • 使用python编写脚本获取手机当前应用apk的信息
  • python备份文件的脚本
  • Python获取网页编码的方法及示例代码
  • python 获取文件列表(或是目录例表)
  • Python通过正则表达式获取,去除(过滤)或者替换HTML标签的几种方法
  • python通过scapy获取局域网所有主机mac地址示例
  • python获取网页状态码示例
  • python中使用urllib2获取http请求状态码的代码例子
  • Python获取远程文件大小的函数代码分享
  • python 获取et和excel的版本号
  • python 获取本机ip地址的两个方法
  • 使用python 获取进程pid号的方法
  • python获取糗百图片代码实例
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Python GUI编程:tkinter实现一个窗口并居中代码
  • 让python同时兼容python2和python3的8个技巧分享
  • Python不使用print而直接输出二进制字符串
  • 使用setup.py安装python包和卸载python包的方法
  • Python中实现json字符串和dict类型的互转
  • 不小心把linux自带的python卸载了,导致安装一个依赖原python的软件不能安装,请问该怎么办?
  • python异常信息堆栈输出到日志文件
  • python读取csv文件示例(python操作csv)
  • python下用os.execl执行centos下的系统时间同步命令ntpdate
  • python基础教程之python消息摘要算法使用示例
  • Python namedtuple对象json序列化/反序列化及对象恢复
  • 新手该如何学python怎么学好python?
  • Python异常模块traceback用法举例
  • 使用python删除nginx缓存文件示例(python文件操作)
  • python之平台独立的调试工具winpdb介绍
  • python学习手册中的python多态示例代码
  • 基于Python的Html/xml解析库Beautiful Soup 4.2.1发布
  • 请教:system("C:\python2.4\python.exe C:\aa.py");该语句有何错误?为什么运行界面一闪就消失了并且没有运行完,请给出正确语句!
  • 测试Python内部类型及type和isinstance用法区别
  • python版本的问题
  • Python3中内置类型bytes和str用法及byte和string之间各种编码转换
  • Mac OS X10.9安装的Python2.7升级Python3.3步骤详解


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3