如何让Python脚本(cygwin)在当前(或相对)目录中运行?

1 投票
3 回答
2180 浏览
提问于 2025-04-15 12:51

我有很多文件夹,里面有用(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 个回答

0

当你输入“ls”这个命令时,会发生什么呢?你能看到“infile.txt”这个文件在列表中吗?

0
os.chdir(my_dir)

或者

os.chdir(os.getcwd())
4

看看 os.getcwd:

补充一下:关于相对路径,可以看看 os.path 模块:

特别是 os.path.join 和 os.path.normpath。比如:

import os
print os.path.normpath(os.path.join(os.getcwd(), '../AnotherBook/Chap2.txt'))

撰写回答