Chinaunix首页 | 论坛 | 博客
  • 博客访问: 26268713
  • 博文数量: 2065
  • 博客积分: 10377
  • 博客等级: 上将
  • 技术积分: 21525
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-04 17:50
文章分类

全部博文(2065)

文章存档

2012年(2)

2011年(19)

2010年(1160)

2009年(969)

2008年(153)

分类: Python/Ruby

2009-11-04 11:51:04

对于Python入门不久的同志这可能是一个比较头疼的问题,但对老鸟来说可能已经是老生常谈了.由于网上关于这方面的资料不多,所以这道菜更主要是为小鸟准备的,虽然我也还是一支小鸟.也欢迎老鸟们品尝,并提出您们宝贵的意见.
 
    Python是一门跨平台的语言,但并不是说你用Python随便写的一个程序就能在不同的平台都能运行.而相对路径和绝对路径是这方 面的典型(相对路径在Windows下可行,而在Linux下提示找不到相应的文件路径),因为Linux和Windows本身结构就存在着较大的差异, 而这差异也给写扩平台的程序造成了困难.我自己尝试过两种方法来解决这个问题,下边就与大家一起分享.
 
    The first one: 程 序中涉及路径时先区分系统类型,再根据不同的操作系统作不同的处理.Python目前支持以下操作系统的识别: 'posix', 'nt', 'mac', 'os2', 'ce', 'java', 'riscos',我也没有完全试验过,不过目前主流的应用系统是Windows,Linux也在蓬勃的发展,所以我们主要区分它们就行了.一般我用一个 if...else语句来区分,菜鸟的做法,老鸟们怎么做呢?
 
    if os.name == ”nt”
        Windows路径...
    else
        Linux路径...
 
    小节: 这种方法较笨,非常不灵活,但这样做解决了同一个程序可以同时在Windows和Linux下运行而不需要改动的问题
 
    The second one: 这 种方法相对灵活的将相对路径转化为不同操作系统的绝对路径,我相对喜欢这种方法.for example: 你写了一个小系统,所有文件和子文件夹都放在一个f:\school的主文件夹里,这个主文件夹下有class,teacher,student,log 等文件夹,有main.py这个小系统的主文件,还有好一些subfile.py的文件.而主文件夹在Linux的路径可能为/home/kkk /school,其他相对的路径和Windows中相同.那么怎样统一他们呢?在main.py中定义一个全局变量path,赋值于path = os.path.abspath(os.path.dirname(sys.argv[0])),这个path在Windows下运行它的值 为"f:/school",而在Linux下运行它的值为"/home/kkk/school",写到这估计大家也知道我想干啥了,如果在程序中要访问 (读写)日志文件可以用path+"/log/kk.log"来表示文件的路径.
 
    小节: 此方法相对于第一种方法灵活,需要注意的是path+"/log/kk.log",我们一般喜欢用path+\\log\\kk.log这样的方式,但这样在Linux中就行不通了,提示找不到文件路径.
 
    注: 网上还有在主程序中加入sys.path.append(path),然后系统中访问文件用相对路径的方法,但我试了一下好像有问题(大家可以尝试一下,让我也分享你们的劳动成果)
 

 原文地址 http://blog.csdn.net/porcupinefinal/archive/2006/03/09/620261.aspx

这个我今天就犯了错误了!
读配置文件或是写配置文件什么的都要指定好其目录的这个我在WIN下面是正常使用的可是跑到LINUX上面就有问题了是目录结构找不到了!

以后要切记让程序更加能够有灵活性才是关键的!

我是这样做的。在我的工程文件定义一个common.py里面定义出来一个变量
path = os.path.abspath(os.path.dirname(sys.argv[0]))
得到此项目的根目录值出来。然后如果要写文件就是直接写
currconfig = path+"/config.txt"
肯定能够找到文件的。我在WIN平台上面测试过了不过不知道在UNIX上面会如何的?



阅读(2136) | 评论(3) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-12-07 12:24:21

赶现在速度做几个开源的产品出来!

chinaunix网友2010-12-07 12:23:58

努力提升我的个人能力。职业方向:运维开发!一定要深入掌握运维开发技术! 个人成长:LINUX内核与安全

chinaunix网友2010-12-07 12:20:31

当前目标:吃透linux!加油!