如何让Python脚本(cygwin)在当前(或相对)目录中运行?
我有很多文件夹,里面有用(g)vim写的文本文件。我还写了一些在Python中觉得有用的小工具。我在这些工具的开头加了一行代码:#!/usr/bin/env python,这样可以使用在cygwin下安装的Python。我想输入这样的命令:
%cd ~/SomeBook
%which pythonUtil
/usr/local/bin/pythonUtil
%pythonUtil ./infile.txt ./outfile.txt
(或者 % pythonUtil someRelPath/infile.txt somePossiblyDifferentRelPath/outfile.txt)
pythonUtil: 找到了infile.txt;正在写outfile.txt;完成了(或者类似的,如果有的话)
但是,我的pythonUtil程序总是告诉我找不到infile.txt。如果我把工具复制到当前工作目录,一切就正常了,但这样的话,我的工具就会到处都是复制品。我该怎么做呢?
再补充一下:总结一下——我想要的是os.path.abspath('filename')。这个函数会返回一个绝对路径字符串,这样就消除了所有的模糊性。
但是:如果使用的Python是安装在cygwin下的,那么返回的绝对路径就是相对于CYGWIN的路径,比如/home/someUser/someDir/someFile.txt。然而,如果Python是安装在Windows下(并且是在cygwin终端命令行中调用的),那么返回的绝对路径就是完整的Windows路径,从“驱动器”开始,比如D:\cygwin\home\someUser\someDir\someFile.txt。
道理是:不要指望cygwin下的Python能为一个不以/为根的文件生成完整的Windows绝对路径;这超出了它的能力范围。不过,如果你使用“/cygdrive/driveLetter”这种方式指定文件路径,cygwin-python可以访问WinXP系统上的任何文件。
备注:在cygwin命令行中,不要在WinXP路径中使用反斜杠('\')作为分隔符;要使用斜杠('/'),相信这个蛇。为什么会这样我也不清楚,但有些分隔符可能会被丢掉,路径可能会被修改,增加额外的层级,比如“Documents and Settings\someUser”之类的Windows无聊的东西。
感谢那些给我指明方向的回复者。
3 个回答
当你输入“ls”这个命令时,会发生什么呢?你能看到“infile.txt”这个文件在列表中吗?
os.chdir(my_dir)
或者
os.chdir(os.getcwd())
看看 os.getcwd:
补充一下:关于相对路径,可以看看 os.path 模块:
特别是 os.path.join 和 os.path.normpath。比如:
import os
print os.path.normpath(os.path.join(os.getcwd(), '../AnotherBook/Chap2.txt'))