关于Python当前路径

编程中遇到的问题  我使用os.getcwd(),在C:\python27下新建py文件,输出显示 C:\Windows\system32,用os.path.abspath(".")输出依然是C:\Windows\system32,后来请教了Google,找到了一个高手的回答。


在此,先谢谢他:Long (quji...@gmail.com)


在写程序的过程中经常会使用到当前路径,因为当前路径使用起来比较方便,只需要持有文件名就可以拿的到该文件的绝对完全路径,这样程序就可以部署在 任何文件目录下。不过,当前路径可是个比较危险的东西,一不留神就会被他骗到,经常也会遇到不少同学询问与当前路径、相对路径、绝对路径的问题。

我就是一个使用当前路径的受害者,而且被困扰了2次,不过最后终于还是找出了原因所在,下面将其与大家分享一下。第一次是用Python写了一个备 份程序,程序主要由3个文件组成:backup.py、config.ini和backup.log,config.ini主要用于设置备份任务的各种 参数,backup.py是通过当前路径的方式来读取config.ini的设置,该程序在Windows和Linux下测试都完全正常,但是在 Linux下通过cron来部署计划任务的时候出现了问题,程序怎么也不能自动运行,当时因为某些原因没有仔细去查原因到底出在什么地方。第二次是我们 要用Python写一个自动更新的程序,它也是由一个主程序去读取一个配置文件来查找服务器的相关信息。该程序在测试时也没有问题,但是通过 py2exe打包成exe并通过Windows的计划任务来部署测试的时候发现程序并没有运行成功,当时非常奇怪,因为不知道问题出现在了什么地方,一 点头绪都没有,然后就是漫长的调试过程,最终发现问题出在读取config.ini这个文件上。通过打印发现当前路径是C:\Windows \system32,这才想到当前路径是当前的工作路径,并不是当前执行程序文件的路径。

问题找到了,剩下的就是解决问题了。

Python下有2个方式是与获取当前路径相关的,一个是os.getcwd(),另外一个是sys.path [0]。

os.getcwd()实际上就是获取当前工作路径(current working directory),而sys.path[0]是当前 运行的脚本文件所在的目录(the directory containing the script that was used to invoke the Python interpreter)。很显然os.getcwd()不适合,我们只能从sys.path[0]下手,因为他 的doc解释好像正好是我的那两个程序所需要的,然后兴奋的试了一下,改完程序:os.path.join(sys.path[0], 'config.ini'),直接运行程序测试,没有问题。然后打包成exe,配置计划任务后,结果运行失败!没辙了,再打印一下路径看看,发现 sys.path[0]返回的值并不是想象中的那样是一个目录,而是那个可执行文件:E:\test\updater.exe。

问题出来了,sys.path[0]在Python脚本文件中返回的是文件夹的路径E:\test(脚本路径为E:\test \updater.py),而通过py2exe打包后的exe文件返回的却是该exe的路径E:\test\updater.exe(exe程序路径为 E:\test\updater.exe),为了兼容这两种方式写了一个函数用于获取当前路径:

def getpwd():
    pwd = sys.path[0]
    if os.path.isfile(pwd):
        pwd = os.path.dirname(pwd)
return pwd


至此,问题解决。


转载于:https://www.cnblogs.com/findeasy/archive/2013/01/01/4053134.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值