Chinaunix首页 | 论坛 | 博客
  • 博客访问: 7893752
  • 博文数量: 701
  • 博客积分: 2150
  • 博客等级: 上尉
  • 技术积分: 13233
  • 用 户 组: 普通用户
  • 注册时间: 2011-06-29 16:28
个人简介

天行健,君子以自强不息!

文章分类

全部博文(701)

文章存档

2019年(2)

2018年(12)

2017年(76)

2016年(120)

2015年(178)

2014年(129)

2013年(123)

2012年(61)

分类: Python/Ruby

2012-03-24 09:43:47

前言
  你写的脚本(或程序)的应用场景肯定有很多,如:本机登录用户在程序所在的目录下运行;本机登录用户在根目录下运行;或者是远程用户使用SSH调用。
  而此时,你的程序涉及到一些文件的读/写操作,这时就需要以当前程序所在绝对路径为文件路径坐标基点--以定位读/写文件的所在,才能成功地读写文件。

1. 错误方式之一

  1. use Cwd;

  2. my $cwd = getcwd();
  3. print "CWD PATH = ",$cwd,"\n";
这种方式:
a.在本机登录用户在程序所在目录下运行该程序时正确--获得该程序的绝对路径。
b.本机登录用户在根目录下运行和远程用户使用SSH调用获得的路径皆为“/root”

2. 错误方式之二

  1. #!/usr/bin/perl

  2. use Cwd;
  3. use File::Basename;

  4. my $cwd;
  5. print "\$0 = ",$0,"\n";
  6. if($0 =~ m{^/})
  7. {
  8.   $cwd = dirname($0);
  9.   $cwd .='/';
  10. }
  11. else
  12. {
  13.   my $dir = getcwd();
  14.   $cwd = dirname("$dir\/$0");
  15. }
  16. print "PATH = ",$cwd,"\n";
这种方式:
a. 本机登录用户在程序所在目录下使用
  1. #./test_program.pl
运行该程序时会出错--绝对路径会多一个“.”。如“/opt/xxx/.”。

3. 正确的方式
  1. use File::Spec;
  2. print "\n";
  3. my $path_curf = File::Spec->rel2abs(__FILE__);
  4. print "C PATH = ",$path_curf,"\n";
  5. my ($vol, $dirs, $file) = File::Spec->splitpath($path_curf);
  6. print "C Dir = ", $dirs,"\n";
使用这种方式就能任何场景下得到正确的当前程序的绝对路径“$dir”。
阅读(5803) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

煜轩2012-03-27 22:40:11

你写的脚本(或程序)的应用场景肯定有很多